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