schema_org_types/schemas/classes/
menu_item.rs

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