1use super::*;
2#[cfg_attr(feature = "derive-debug", derive(Debug))]
4#[cfg_attr(feature = "derive-clone", derive(Clone))]
5pub struct Thing {
6 pub r#additional_type: Vec<AdditionalTypeProperty>,
8 pub r#alternate_name: Vec<AlternateNameProperty>,
10 pub r#description: Vec<DescriptionProperty>,
12 pub r#disambiguating_description: Vec<DisambiguatingDescriptionProperty>,
14 pub r#identifier: Vec<IdentifierProperty>,
16 pub r#image: Vec<ImageProperty>,
18 pub r#main_entity_of_page: Vec<MainEntityOfPageProperty>,
20 pub r#name: Vec<NameProperty>,
22 pub r#potential_action: Vec<PotentialActionProperty>,
24 pub r#same_as: Vec<SameAsProperty>,
26 pub r#subject_of: Vec<SubjectOfProperty>,
28 pub r#url: Vec<UrlProperty>,
30}
31pub trait ThingTrait {
33 fn get_additional_type(&self) -> &[AdditionalTypeProperty];
35 fn take_additional_type(&mut self) -> Vec<AdditionalTypeProperty>;
37 fn get_alternate_name(&self) -> &[AlternateNameProperty];
39 fn take_alternate_name(&mut self) -> Vec<AlternateNameProperty>;
41 fn get_description(&self) -> &[DescriptionProperty];
43 fn take_description(&mut self) -> Vec<DescriptionProperty>;
45 fn get_disambiguating_description(&self) -> &[DisambiguatingDescriptionProperty];
47 fn take_disambiguating_description(&mut self) -> Vec<DisambiguatingDescriptionProperty>;
49 fn get_identifier(&self) -> &[IdentifierProperty];
51 fn take_identifier(&mut self) -> Vec<IdentifierProperty>;
53 fn get_image(&self) -> &[ImageProperty];
55 fn take_image(&mut self) -> Vec<ImageProperty>;
57 fn get_main_entity_of_page(&self) -> &[MainEntityOfPageProperty];
59 fn take_main_entity_of_page(&mut self) -> Vec<MainEntityOfPageProperty>;
61 fn get_name(&self) -> &[NameProperty];
63 fn take_name(&mut self) -> Vec<NameProperty>;
65 fn get_potential_action(&self) -> &[PotentialActionProperty];
67 fn take_potential_action(&mut self) -> Vec<PotentialActionProperty>;
69 fn get_same_as(&self) -> &[SameAsProperty];
71 fn take_same_as(&mut self) -> Vec<SameAsProperty>;
73 fn get_subject_of(&self) -> &[SubjectOfProperty];
75 fn take_subject_of(&mut self) -> Vec<SubjectOfProperty>;
77 fn get_url(&self) -> &[UrlProperty];
79 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}