1use super::*;
2#[cfg_attr(feature = "derive-debug", derive(Debug))]
4#[cfg_attr(feature = "derive-clone", derive(Clone))]
5pub struct MenuItem {
6 pub r#menu_add_on: Vec<MenuAddOnProperty>,
8 pub r#nutrition: Vec<NutritionProperty>,
10 pub r#offers: Vec<OffersProperty>,
12 pub r#suitable_for_diet: Vec<SuitableForDietProperty>,
14 pub r#additional_type: Vec<AdditionalTypeProperty>,
16 pub r#alternate_name: Vec<AlternateNameProperty>,
18 pub r#description: Vec<DescriptionProperty>,
20 pub r#disambiguating_description: Vec<DisambiguatingDescriptionProperty>,
22 pub r#identifier: Vec<IdentifierProperty>,
24 pub r#image: Vec<ImageProperty>,
26 pub r#main_entity_of_page: Vec<MainEntityOfPageProperty>,
28 pub r#name: Vec<NameProperty>,
30 pub r#potential_action: Vec<PotentialActionProperty>,
32 pub r#same_as: Vec<SameAsProperty>,
34 pub r#subject_of: Vec<SubjectOfProperty>,
36 pub r#url: Vec<UrlProperty>,
38}
39pub trait MenuItemTrait {
41 fn get_menu_add_on(&self) -> &[MenuAddOnProperty];
43 fn take_menu_add_on(&mut self) -> Vec<MenuAddOnProperty>;
45 fn get_nutrition(&self) -> &[NutritionProperty];
47 fn take_nutrition(&mut self) -> Vec<NutritionProperty>;
49 fn get_offers(&self) -> &[OffersProperty];
51 fn take_offers(&mut self) -> Vec<OffersProperty>;
53 fn get_suitable_for_diet(&self) -> &[SuitableForDietProperty];
55 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}