schema_org_types/schemas/classes/
thing.rs

1use super::*;
2/// <https://schema.org/Thing>
3#[cfg_attr(feature = "derive-debug", derive(Debug))]
4#[cfg_attr(feature = "derive-clone", derive(Clone))]
5pub struct Thing {
6	/// <https://schema.org/additionalType>
7	pub r#additional_type: Vec<AdditionalTypeProperty>,
8	/// <https://schema.org/alternateName>
9	pub r#alternate_name: Vec<AlternateNameProperty>,
10	/// <https://schema.org/description>
11	pub r#description: Vec<DescriptionProperty>,
12	/// <https://schema.org/disambiguatingDescription>
13	pub r#disambiguating_description: Vec<DisambiguatingDescriptionProperty>,
14	/// <https://schema.org/identifier>
15	pub r#identifier: Vec<IdentifierProperty>,
16	/// <https://schema.org/image>
17	pub r#image: Vec<ImageProperty>,
18	/// <https://schema.org/mainEntityOfPage>
19	pub r#main_entity_of_page: Vec<MainEntityOfPageProperty>,
20	/// <https://schema.org/name>
21	pub r#name: Vec<NameProperty>,
22	/// <https://schema.org/potentialAction>
23	pub r#potential_action: Vec<PotentialActionProperty>,
24	/// <https://schema.org/sameAs>
25	pub r#same_as: Vec<SameAsProperty>,
26	/// <https://schema.org/subjectOf>
27	pub r#subject_of: Vec<SubjectOfProperty>,
28	/// <https://schema.org/url>
29	pub r#url: Vec<UrlProperty>,
30}
31/// This trait is for properties from <https://schema.org/Thing>.
32pub trait ThingTrait {
33	/// Get <https://schema.org/additionalType> from [`Self`] as borrowed slice.
34	fn get_additional_type(&self) -> &[AdditionalTypeProperty];
35	/// Take <https://schema.org/additionalType> from [`Self`] as owned vector.
36	fn take_additional_type(&mut self) -> Vec<AdditionalTypeProperty>;
37	/// Get <https://schema.org/alternateName> from [`Self`] as borrowed slice.
38	fn get_alternate_name(&self) -> &[AlternateNameProperty];
39	/// Take <https://schema.org/alternateName> from [`Self`] as owned vector.
40	fn take_alternate_name(&mut self) -> Vec<AlternateNameProperty>;
41	/// Get <https://schema.org/description> from [`Self`] as borrowed slice.
42	fn get_description(&self) -> &[DescriptionProperty];
43	/// Take <https://schema.org/description> from [`Self`] as owned vector.
44	fn take_description(&mut self) -> Vec<DescriptionProperty>;
45	/// Get <https://schema.org/disambiguatingDescription> from [`Self`] as borrowed slice.
46	fn get_disambiguating_description(&self) -> &[DisambiguatingDescriptionProperty];
47	/// Take <https://schema.org/disambiguatingDescription> from [`Self`] as owned vector.
48	fn take_disambiguating_description(&mut self) -> Vec<DisambiguatingDescriptionProperty>;
49	/// Get <https://schema.org/identifier> from [`Self`] as borrowed slice.
50	fn get_identifier(&self) -> &[IdentifierProperty];
51	/// Take <https://schema.org/identifier> from [`Self`] as owned vector.
52	fn take_identifier(&mut self) -> Vec<IdentifierProperty>;
53	/// Get <https://schema.org/image> from [`Self`] as borrowed slice.
54	fn get_image(&self) -> &[ImageProperty];
55	/// Take <https://schema.org/image> from [`Self`] as owned vector.
56	fn take_image(&mut self) -> Vec<ImageProperty>;
57	/// Get <https://schema.org/mainEntityOfPage> from [`Self`] as borrowed slice.
58	fn get_main_entity_of_page(&self) -> &[MainEntityOfPageProperty];
59	/// Take <https://schema.org/mainEntityOfPage> from [`Self`] as owned vector.
60	fn take_main_entity_of_page(&mut self) -> Vec<MainEntityOfPageProperty>;
61	/// Get <https://schema.org/name> from [`Self`] as borrowed slice.
62	fn get_name(&self) -> &[NameProperty];
63	/// Take <https://schema.org/name> from [`Self`] as owned vector.
64	fn take_name(&mut self) -> Vec<NameProperty>;
65	/// Get <https://schema.org/potentialAction> from [`Self`] as borrowed slice.
66	fn get_potential_action(&self) -> &[PotentialActionProperty];
67	/// Take <https://schema.org/potentialAction> from [`Self`] as owned vector.
68	fn take_potential_action(&mut self) -> Vec<PotentialActionProperty>;
69	/// Get <https://schema.org/sameAs> from [`Self`] as borrowed slice.
70	fn get_same_as(&self) -> &[SameAsProperty];
71	/// Take <https://schema.org/sameAs> from [`Self`] as owned vector.
72	fn take_same_as(&mut self) -> Vec<SameAsProperty>;
73	/// Get <https://schema.org/subjectOf> from [`Self`] as borrowed slice.
74	fn get_subject_of(&self) -> &[SubjectOfProperty];
75	/// Take <https://schema.org/subjectOf> from [`Self`] as owned vector.
76	fn take_subject_of(&mut self) -> Vec<SubjectOfProperty>;
77	/// Get <https://schema.org/url> from [`Self`] as borrowed slice.
78	fn get_url(&self) -> &[UrlProperty];
79	/// Take <https://schema.org/url> from [`Self`] as owned vector.
80	fn take_url(&mut self) -> Vec<UrlProperty>;
81}
82impl ThingTrait for Thing {
83	fn get_additional_type(&self) -> &[AdditionalTypeProperty] {
84		self.r#additional_type.as_slice()
85	}
86	fn take_additional_type(&mut self) -> Vec<AdditionalTypeProperty> {
87		std::mem::take(&mut self.r#additional_type)
88	}
89	fn get_alternate_name(&self) -> &[AlternateNameProperty] {
90		self.r#alternate_name.as_slice()
91	}
92	fn take_alternate_name(&mut self) -> Vec<AlternateNameProperty> {
93		std::mem::take(&mut self.r#alternate_name)
94	}
95	fn get_description(&self) -> &[DescriptionProperty] {
96		self.r#description.as_slice()
97	}
98	fn take_description(&mut self) -> Vec<DescriptionProperty> {
99		std::mem::take(&mut self.r#description)
100	}
101	fn get_disambiguating_description(&self) -> &[DisambiguatingDescriptionProperty] {
102		self.r#disambiguating_description.as_slice()
103	}
104	fn take_disambiguating_description(&mut self) -> Vec<DisambiguatingDescriptionProperty> {
105		std::mem::take(&mut self.r#disambiguating_description)
106	}
107	fn get_identifier(&self) -> &[IdentifierProperty] {
108		self.r#identifier.as_slice()
109	}
110	fn take_identifier(&mut self) -> Vec<IdentifierProperty> {
111		std::mem::take(&mut self.r#identifier)
112	}
113	fn get_image(&self) -> &[ImageProperty] {
114		self.r#image.as_slice()
115	}
116	fn take_image(&mut self) -> Vec<ImageProperty> {
117		std::mem::take(&mut self.r#image)
118	}
119	fn get_main_entity_of_page(&self) -> &[MainEntityOfPageProperty] {
120		self.r#main_entity_of_page.as_slice()
121	}
122	fn take_main_entity_of_page(&mut self) -> Vec<MainEntityOfPageProperty> {
123		std::mem::take(&mut self.r#main_entity_of_page)
124	}
125	fn get_name(&self) -> &[NameProperty] {
126		self.r#name.as_slice()
127	}
128	fn take_name(&mut self) -> Vec<NameProperty> {
129		std::mem::take(&mut self.r#name)
130	}
131	fn get_potential_action(&self) -> &[PotentialActionProperty] {
132		self.r#potential_action.as_slice()
133	}
134	fn take_potential_action(&mut self) -> Vec<PotentialActionProperty> {
135		std::mem::take(&mut self.r#potential_action)
136	}
137	fn get_same_as(&self) -> &[SameAsProperty] {
138		self.r#same_as.as_slice()
139	}
140	fn take_same_as(&mut self) -> Vec<SameAsProperty> {
141		std::mem::take(&mut self.r#same_as)
142	}
143	fn get_subject_of(&self) -> &[SubjectOfProperty] {
144		self.r#subject_of.as_slice()
145	}
146	fn take_subject_of(&mut self) -> Vec<SubjectOfProperty> {
147		std::mem::take(&mut self.r#subject_of)
148	}
149	fn get_url(&self) -> &[UrlProperty] {
150		self.r#url.as_slice()
151	}
152	fn take_url(&mut self) -> Vec<UrlProperty> {
153		std::mem::take(&mut self.r#url)
154	}
155}
156#[cfg(feature = "serde")]
157mod serde {
158	use std::{fmt, fmt::Formatter};
159
160	use ::serde::{
161		de, de::Visitor, ser::SerializeStruct, Deserialize, Deserializer, Serialize, Serializer,
162	};
163
164	use super::*;
165	impl Serialize for Thing {
166		fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
167		where
168			S: Serializer,
169		{
170			let len: usize = [
171				!Vec::is_empty(&self.r#additional_type) as usize,
172				!Vec::is_empty(&self.r#alternate_name) as usize,
173				!Vec::is_empty(&self.r#description) as usize,
174				!Vec::is_empty(&self.r#disambiguating_description) as usize,
175				!Vec::is_empty(&self.r#identifier) as usize,
176				!Vec::is_empty(&self.r#image) as usize,
177				!Vec::is_empty(&self.r#main_entity_of_page) as usize,
178				!Vec::is_empty(&self.r#name) as usize,
179				!Vec::is_empty(&self.r#potential_action) as usize,
180				!Vec::is_empty(&self.r#same_as) as usize,
181				!Vec::is_empty(&self.r#subject_of) as usize,
182				!Vec::is_empty(&self.r#url) as usize,
183			]
184			.iter()
185			.sum();
186			let mut serialize_struct = Serializer::serialize_struct(serializer, "Thing", len)?;
187			if !Vec::is_empty(&self.r#additional_type) {
188				serialize_struct.serialize_field("additionalType", {
189					struct SerializeWith<'a>(&'a Vec<AdditionalTypeProperty>);
190					impl<'a> Serialize for SerializeWith<'a> {
191						fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
192						where
193							S: Serializer,
194						{
195							serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
196								self.0, serializer,
197							)
198						}
199					}
200					&SerializeWith(&self.r#additional_type)
201				})?;
202			} else {
203				serialize_struct.skip_field("additionalType")?;
204			}
205			if !Vec::is_empty(&self.r#alternate_name) {
206				serialize_struct.serialize_field("alternateName", {
207					struct SerializeWith<'a>(&'a Vec<AlternateNameProperty>);
208					impl<'a> Serialize for SerializeWith<'a> {
209						fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
210						where
211							S: Serializer,
212						{
213							serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
214								self.0, serializer,
215							)
216						}
217					}
218					&SerializeWith(&self.r#alternate_name)
219				})?;
220			} else {
221				serialize_struct.skip_field("alternateName")?;
222			}
223			if !Vec::is_empty(&self.r#description) {
224				serialize_struct.serialize_field("description", {
225					struct SerializeWith<'a>(&'a Vec<DescriptionProperty>);
226					impl<'a> Serialize for SerializeWith<'a> {
227						fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
228						where
229							S: Serializer,
230						{
231							serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
232								self.0, serializer,
233							)
234						}
235					}
236					&SerializeWith(&self.r#description)
237				})?;
238			} else {
239				serialize_struct.skip_field("description")?;
240			}
241			if !Vec::is_empty(&self.r#disambiguating_description) {
242				serialize_struct.serialize_field("disambiguatingDescription", {
243					struct SerializeWith<'a>(&'a Vec<DisambiguatingDescriptionProperty>);
244					impl<'a> Serialize for SerializeWith<'a> {
245						fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
246						where
247							S: Serializer,
248						{
249							serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
250								self.0, serializer,
251							)
252						}
253					}
254					&SerializeWith(&self.r#disambiguating_description)
255				})?;
256			} else {
257				serialize_struct.skip_field("disambiguatingDescription")?;
258			}
259			if !Vec::is_empty(&self.r#identifier) {
260				serialize_struct.serialize_field("identifier", {
261					struct SerializeWith<'a>(&'a Vec<IdentifierProperty>);
262					impl<'a> Serialize for SerializeWith<'a> {
263						fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
264						where
265							S: Serializer,
266						{
267							serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
268								self.0, serializer,
269							)
270						}
271					}
272					&SerializeWith(&self.r#identifier)
273				})?;
274			} else {
275				serialize_struct.skip_field("identifier")?;
276			}
277			if !Vec::is_empty(&self.r#image) {
278				serialize_struct.serialize_field("image", {
279					struct SerializeWith<'a>(&'a Vec<ImageProperty>);
280					impl<'a> Serialize for SerializeWith<'a> {
281						fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
282						where
283							S: Serializer,
284						{
285							serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
286								self.0, serializer,
287							)
288						}
289					}
290					&SerializeWith(&self.r#image)
291				})?;
292			} else {
293				serialize_struct.skip_field("image")?;
294			}
295			if !Vec::is_empty(&self.r#main_entity_of_page) {
296				serialize_struct.serialize_field("mainEntityOfPage", {
297					struct SerializeWith<'a>(&'a Vec<MainEntityOfPageProperty>);
298					impl<'a> Serialize for SerializeWith<'a> {
299						fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
300						where
301							S: Serializer,
302						{
303							serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
304								self.0, serializer,
305							)
306						}
307					}
308					&SerializeWith(&self.r#main_entity_of_page)
309				})?;
310			} else {
311				serialize_struct.skip_field("mainEntityOfPage")?;
312			}
313			if !Vec::is_empty(&self.r#name) {
314				serialize_struct.serialize_field("name", {
315					struct SerializeWith<'a>(&'a Vec<NameProperty>);
316					impl<'a> Serialize for SerializeWith<'a> {
317						fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
318						where
319							S: Serializer,
320						{
321							serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
322								self.0, serializer,
323							)
324						}
325					}
326					&SerializeWith(&self.r#name)
327				})?;
328			} else {
329				serialize_struct.skip_field("name")?;
330			}
331			if !Vec::is_empty(&self.r#potential_action) {
332				serialize_struct.serialize_field("potentialAction", {
333					struct SerializeWith<'a>(&'a Vec<PotentialActionProperty>);
334					impl<'a> Serialize for SerializeWith<'a> {
335						fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
336						where
337							S: Serializer,
338						{
339							serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
340								self.0, serializer,
341							)
342						}
343					}
344					&SerializeWith(&self.r#potential_action)
345				})?;
346			} else {
347				serialize_struct.skip_field("potentialAction")?;
348			}
349			if !Vec::is_empty(&self.r#same_as) {
350				serialize_struct.serialize_field("sameAs", {
351					struct SerializeWith<'a>(&'a Vec<SameAsProperty>);
352					impl<'a> Serialize for SerializeWith<'a> {
353						fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
354						where
355							S: Serializer,
356						{
357							serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
358								self.0, serializer,
359							)
360						}
361					}
362					&SerializeWith(&self.r#same_as)
363				})?;
364			} else {
365				serialize_struct.skip_field("sameAs")?;
366			}
367			if !Vec::is_empty(&self.r#subject_of) {
368				serialize_struct.serialize_field("subjectOf", {
369					struct SerializeWith<'a>(&'a Vec<SubjectOfProperty>);
370					impl<'a> Serialize for SerializeWith<'a> {
371						fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
372						where
373							S: Serializer,
374						{
375							serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
376								self.0, serializer,
377							)
378						}
379					}
380					&SerializeWith(&self.r#subject_of)
381				})?;
382			} else {
383				serialize_struct.skip_field("subjectOf")?;
384			}
385			if !Vec::is_empty(&self.r#url) {
386				serialize_struct.serialize_field("url", {
387					struct SerializeWith<'a>(&'a Vec<UrlProperty>);
388					impl<'a> Serialize for SerializeWith<'a> {
389						fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
390						where
391							S: Serializer,
392						{
393							serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
394								self.0, serializer,
395							)
396						}
397					}
398					&SerializeWith(&self.r#url)
399				})?;
400			} else {
401				serialize_struct.skip_field("url")?;
402			}
403			serialize_struct.end()
404		}
405	}
406	impl<'de> Deserialize<'de> for Thing {
407		fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
408		where
409			D: Deserializer<'de>,
410		{
411			enum Field {
412				AdditionalType,
413				AlternateName,
414				Description,
415				DisambiguatingDescription,
416				Identifier,
417				Image,
418				MainEntityOfPage,
419				Name,
420				PotentialAction,
421				SameAs,
422				SubjectOf,
423				Url,
424				Ignore,
425			}
426			struct FieldVisitor;
427			impl<'de> Visitor<'de> for FieldVisitor {
428				type Value = Field;
429				fn expecting(&self, formatter: &mut Formatter) -> fmt::Result {
430					formatter.write_str("field identifier")
431				}
432				fn visit_str<E>(self, value: &str) -> Result<Self::Value, E>
433				where
434					E: de::Error,
435				{
436					match value {
437						"additionalType" => Ok(Field::AdditionalType),
438						"alternateName" => Ok(Field::AlternateName),
439						"description" => Ok(Field::Description),
440						"disambiguatingDescription" => Ok(Field::DisambiguatingDescription),
441						"identifier" => Ok(Field::Identifier),
442						"image" => Ok(Field::Image),
443						"mainEntityOfPage" => Ok(Field::MainEntityOfPage),
444						"name" => Ok(Field::Name),
445						"potentialAction" => Ok(Field::PotentialAction),
446						"sameAs" => Ok(Field::SameAs),
447						"subjectOf" => Ok(Field::SubjectOf),
448						"url" => Ok(Field::Url),
449						"id" | "type" => Ok(Field::Ignore),
450						_ => Err(de::Error::unknown_field(value, FIELDS)),
451					}
452				}
453				fn visit_bytes<E>(self, value: &[u8]) -> Result<Self::Value, E>
454				where
455					E: de::Error,
456				{
457					match value {
458						b"additionalType" => Ok(Field::AdditionalType),
459						b"alternateName" => Ok(Field::AlternateName),
460						b"description" => Ok(Field::Description),
461						b"disambiguatingDescription" => Ok(Field::DisambiguatingDescription),
462						b"identifier" => Ok(Field::Identifier),
463						b"image" => Ok(Field::Image),
464						b"mainEntityOfPage" => Ok(Field::MainEntityOfPage),
465						b"name" => Ok(Field::Name),
466						b"potentialAction" => Ok(Field::PotentialAction),
467						b"sameAs" => Ok(Field::SameAs),
468						b"subjectOf" => Ok(Field::SubjectOf),
469						b"url" => Ok(Field::Url),
470						b"id" | b"type" => Ok(Field::Ignore),
471						_ => {
472							let value = &String::from_utf8_lossy(value);
473							Err(de::Error::unknown_field(value, FIELDS))
474						}
475					}
476				}
477			}
478			impl<'de> Deserialize<'de> for Field {
479				fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
480				where
481					D: Deserializer<'de>,
482				{
483					deserializer.deserialize_identifier(FieldVisitor)
484				}
485			}
486			struct ClassVisitor;
487			impl<'de> Visitor<'de> for ClassVisitor {
488				type Value = Thing;
489				fn expecting(&self, formatter: &mut Formatter) -> fmt::Result {
490					formatter.write_str("schema.org schema Thing")
491				}
492				fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error>
493				where
494					A: de::MapAccess<'de>,
495				{
496					let mut r#additional_type_property = None;
497					let mut r#alternate_name_property = None;
498					let mut r#description_property = None;
499					let mut r#disambiguating_description_property = None;
500					let mut r#identifier_property = None;
501					let mut r#image_property = None;
502					let mut r#main_entity_of_page_property = None;
503					let mut r#name_property = None;
504					let mut r#potential_action_property = None;
505					let mut r#same_as_property = None;
506					let mut r#subject_of_property = None;
507					let mut r#url_property = None;
508					while let Some(key) = map.next_key::<Field>()? {
509						match key {
510							Field::AdditionalType => {
511								if r#additional_type_property.is_some() {
512									return Err(<A::Error as de::Error>::duplicate_field(
513										"additionalType",
514									));
515								}
516								r#additional_type_property = Some({
517									struct DeserializeWith(Vec<AdditionalTypeProperty>);
518									impl<'de> Deserialize<'de> for DeserializeWith {
519										fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
520										where
521											D: Deserializer<'de>,
522										{
523											Ok(DeserializeWith(serde_with::As::<
524												serde_with::OneOrMany<serde_with::Same>,
525											>::deserialize(deserializer)?))
526										}
527									}
528									match map.next_value::<DeserializeWith>() {
529										Ok(deserialize_with) => deserialize_with.0,
530										Err(err) => {
531											return Err(err);
532										}
533									}
534								});
535							}
536							Field::AlternateName => {
537								if r#alternate_name_property.is_some() {
538									return Err(<A::Error as de::Error>::duplicate_field(
539										"alternateName",
540									));
541								}
542								r#alternate_name_property = Some({
543									struct DeserializeWith(Vec<AlternateNameProperty>);
544									impl<'de> Deserialize<'de> for DeserializeWith {
545										fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
546										where
547											D: Deserializer<'de>,
548										{
549											Ok(DeserializeWith(serde_with::As::<
550												serde_with::OneOrMany<serde_with::Same>,
551											>::deserialize(deserializer)?))
552										}
553									}
554									match map.next_value::<DeserializeWith>() {
555										Ok(deserialize_with) => deserialize_with.0,
556										Err(err) => {
557											return Err(err);
558										}
559									}
560								});
561							}
562							Field::Description => {
563								if r#description_property.is_some() {
564									return Err(<A::Error as de::Error>::duplicate_field(
565										"description",
566									));
567								}
568								r#description_property = Some({
569									struct DeserializeWith(Vec<DescriptionProperty>);
570									impl<'de> Deserialize<'de> for DeserializeWith {
571										fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
572										where
573											D: Deserializer<'de>,
574										{
575											Ok(DeserializeWith(serde_with::As::<
576												serde_with::OneOrMany<serde_with::Same>,
577											>::deserialize(deserializer)?))
578										}
579									}
580									match map.next_value::<DeserializeWith>() {
581										Ok(deserialize_with) => deserialize_with.0,
582										Err(err) => {
583											return Err(err);
584										}
585									}
586								});
587							}
588							Field::DisambiguatingDescription => {
589								if r#disambiguating_description_property.is_some() {
590									return Err(<A::Error as de::Error>::duplicate_field(
591										"disambiguatingDescription",
592									));
593								}
594								r#disambiguating_description_property = Some({
595									struct DeserializeWith(Vec<DisambiguatingDescriptionProperty>);
596									impl<'de> Deserialize<'de> for DeserializeWith {
597										fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
598										where
599											D: Deserializer<'de>,
600										{
601											Ok(DeserializeWith(serde_with::As::<
602												serde_with::OneOrMany<serde_with::Same>,
603											>::deserialize(deserializer)?))
604										}
605									}
606									match map.next_value::<DeserializeWith>() {
607										Ok(deserialize_with) => deserialize_with.0,
608										Err(err) => {
609											return Err(err);
610										}
611									}
612								});
613							}
614							Field::Identifier => {
615								if r#identifier_property.is_some() {
616									return Err(<A::Error as de::Error>::duplicate_field(
617										"identifier",
618									));
619								}
620								r#identifier_property = Some({
621									struct DeserializeWith(Vec<IdentifierProperty>);
622									impl<'de> Deserialize<'de> for DeserializeWith {
623										fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
624										where
625											D: Deserializer<'de>,
626										{
627											Ok(DeserializeWith(serde_with::As::<
628												serde_with::OneOrMany<serde_with::Same>,
629											>::deserialize(deserializer)?))
630										}
631									}
632									match map.next_value::<DeserializeWith>() {
633										Ok(deserialize_with) => deserialize_with.0,
634										Err(err) => {
635											return Err(err);
636										}
637									}
638								});
639							}
640							Field::Image => {
641								if r#image_property.is_some() {
642									return Err(<A::Error as de::Error>::duplicate_field("image"));
643								}
644								r#image_property = Some({
645									struct DeserializeWith(Vec<ImageProperty>);
646									impl<'de> Deserialize<'de> for DeserializeWith {
647										fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
648										where
649											D: Deserializer<'de>,
650										{
651											Ok(DeserializeWith(serde_with::As::<
652												serde_with::OneOrMany<serde_with::Same>,
653											>::deserialize(deserializer)?))
654										}
655									}
656									match map.next_value::<DeserializeWith>() {
657										Ok(deserialize_with) => deserialize_with.0,
658										Err(err) => {
659											return Err(err);
660										}
661									}
662								});
663							}
664							Field::MainEntityOfPage => {
665								if r#main_entity_of_page_property.is_some() {
666									return Err(<A::Error as de::Error>::duplicate_field(
667										"mainEntityOfPage",
668									));
669								}
670								r#main_entity_of_page_property = Some({
671									struct DeserializeWith(Vec<MainEntityOfPageProperty>);
672									impl<'de> Deserialize<'de> for DeserializeWith {
673										fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
674										where
675											D: Deserializer<'de>,
676										{
677											Ok(DeserializeWith(serde_with::As::<
678												serde_with::OneOrMany<serde_with::Same>,
679											>::deserialize(deserializer)?))
680										}
681									}
682									match map.next_value::<DeserializeWith>() {
683										Ok(deserialize_with) => deserialize_with.0,
684										Err(err) => {
685											return Err(err);
686										}
687									}
688								});
689							}
690							Field::Name => {
691								if r#name_property.is_some() {
692									return Err(<A::Error as de::Error>::duplicate_field("name"));
693								}
694								r#name_property = Some({
695									struct DeserializeWith(Vec<NameProperty>);
696									impl<'de> Deserialize<'de> for DeserializeWith {
697										fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
698										where
699											D: Deserializer<'de>,
700										{
701											Ok(DeserializeWith(serde_with::As::<
702												serde_with::OneOrMany<serde_with::Same>,
703											>::deserialize(deserializer)?))
704										}
705									}
706									match map.next_value::<DeserializeWith>() {
707										Ok(deserialize_with) => deserialize_with.0,
708										Err(err) => {
709											return Err(err);
710										}
711									}
712								});
713							}
714							Field::PotentialAction => {
715								if r#potential_action_property.is_some() {
716									return Err(<A::Error as de::Error>::duplicate_field(
717										"potentialAction",
718									));
719								}
720								r#potential_action_property = Some({
721									struct DeserializeWith(Vec<PotentialActionProperty>);
722									impl<'de> Deserialize<'de> for DeserializeWith {
723										fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
724										where
725											D: Deserializer<'de>,
726										{
727											Ok(DeserializeWith(serde_with::As::<
728												serde_with::OneOrMany<serde_with::Same>,
729											>::deserialize(deserializer)?))
730										}
731									}
732									match map.next_value::<DeserializeWith>() {
733										Ok(deserialize_with) => deserialize_with.0,
734										Err(err) => {
735											return Err(err);
736										}
737									}
738								});
739							}
740							Field::SameAs => {
741								if r#same_as_property.is_some() {
742									return Err(<A::Error as de::Error>::duplicate_field("sameAs"));
743								}
744								r#same_as_property = Some({
745									struct DeserializeWith(Vec<SameAsProperty>);
746									impl<'de> Deserialize<'de> for DeserializeWith {
747										fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
748										where
749											D: Deserializer<'de>,
750										{
751											Ok(DeserializeWith(serde_with::As::<
752												serde_with::OneOrMany<serde_with::Same>,
753											>::deserialize(deserializer)?))
754										}
755									}
756									match map.next_value::<DeserializeWith>() {
757										Ok(deserialize_with) => deserialize_with.0,
758										Err(err) => {
759											return Err(err);
760										}
761									}
762								});
763							}
764							Field::SubjectOf => {
765								if r#subject_of_property.is_some() {
766									return Err(<A::Error as de::Error>::duplicate_field(
767										"subjectOf",
768									));
769								}
770								r#subject_of_property = Some({
771									struct DeserializeWith(Vec<SubjectOfProperty>);
772									impl<'de> Deserialize<'de> for DeserializeWith {
773										fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
774										where
775											D: Deserializer<'de>,
776										{
777											Ok(DeserializeWith(serde_with::As::<
778												serde_with::OneOrMany<serde_with::Same>,
779											>::deserialize(deserializer)?))
780										}
781									}
782									match map.next_value::<DeserializeWith>() {
783										Ok(deserialize_with) => deserialize_with.0,
784										Err(err) => {
785											return Err(err);
786										}
787									}
788								});
789							}
790							Field::Url => {
791								if r#url_property.is_some() {
792									return Err(<A::Error as de::Error>::duplicate_field("url"));
793								}
794								r#url_property = Some({
795									struct DeserializeWith(Vec<UrlProperty>);
796									impl<'de> Deserialize<'de> for DeserializeWith {
797										fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
798										where
799											D: Deserializer<'de>,
800										{
801											Ok(DeserializeWith(serde_with::As::<
802												serde_with::OneOrMany<serde_with::Same>,
803											>::deserialize(deserializer)?))
804										}
805									}
806									match map.next_value::<DeserializeWith>() {
807										Ok(deserialize_with) => deserialize_with.0,
808										Err(err) => {
809											return Err(err);
810										}
811									}
812								});
813							}
814							Field::Ignore => {
815								let _ = map.next_value::<de::IgnoredAny>()?;
816							}
817						}
818					}
819					Ok(Thing {
820						r#additional_type: r#additional_type_property.unwrap_or_default(),
821						r#alternate_name: r#alternate_name_property.unwrap_or_default(),
822						r#description: r#description_property.unwrap_or_default(),
823						r#disambiguating_description: r#disambiguating_description_property
824							.unwrap_or_default(),
825						r#identifier: r#identifier_property.unwrap_or_default(),
826						r#image: r#image_property.unwrap_or_default(),
827						r#main_entity_of_page: r#main_entity_of_page_property.unwrap_or_default(),
828						r#name: r#name_property.unwrap_or_default(),
829						r#potential_action: r#potential_action_property.unwrap_or_default(),
830						r#same_as: r#same_as_property.unwrap_or_default(),
831						r#subject_of: r#subject_of_property.unwrap_or_default(),
832						r#url: r#url_property.unwrap_or_default(),
833					})
834				}
835			}
836			const FIELDS: &[&str] = &[
837				"additionalType",
838				"alternateName",
839				"description",
840				"disambiguatingDescription",
841				"identifier",
842				"image",
843				"mainEntityOfPage",
844				"name",
845				"potentialAction",
846				"sameAs",
847				"subjectOf",
848				"url",
849			];
850			deserializer.deserialize_struct("Thing", FIELDS, ClassVisitor)
851		}
852	}
853}