schema_org_types/schemas/classes/
grant.rs

1use super::*;
2/// <https://schema.org/Grant>
3#[cfg_attr(feature = "derive-debug", derive(Debug))]
4#[cfg_attr(feature = "derive-clone", derive(Clone))]
5pub struct Grant {
6	/// <https://schema.org/fundedItem>
7	pub r#funded_item: Vec<FundedItemProperty>,
8	/// <https://schema.org/funder>
9	pub r#funder: Vec<FunderProperty>,
10	/// <https://schema.org/sponsor>
11	pub r#sponsor: Vec<SponsorProperty>,
12	/// <https://schema.org/additionalType>
13	pub r#additional_type: Vec<AdditionalTypeProperty>,
14	/// <https://schema.org/alternateName>
15	pub r#alternate_name: Vec<AlternateNameProperty>,
16	/// <https://schema.org/description>
17	pub r#description: Vec<DescriptionProperty>,
18	/// <https://schema.org/disambiguatingDescription>
19	pub r#disambiguating_description: Vec<DisambiguatingDescriptionProperty>,
20	/// <https://schema.org/identifier>
21	pub r#identifier: Vec<IdentifierProperty>,
22	/// <https://schema.org/image>
23	pub r#image: Vec<ImageProperty>,
24	/// <https://schema.org/mainEntityOfPage>
25	pub r#main_entity_of_page: Vec<MainEntityOfPageProperty>,
26	/// <https://schema.org/name>
27	pub r#name: Vec<NameProperty>,
28	/// <https://schema.org/potentialAction>
29	pub r#potential_action: Vec<PotentialActionProperty>,
30	/// <https://schema.org/sameAs>
31	pub r#same_as: Vec<SameAsProperty>,
32	/// <https://schema.org/subjectOf>
33	pub r#subject_of: Vec<SubjectOfProperty>,
34	/// <https://schema.org/url>
35	pub r#url: Vec<UrlProperty>,
36}
37/// This trait is for properties from <https://schema.org/Grant>.
38pub trait GrantTrait {
39	/// Get <https://schema.org/fundedItem> from [`Self`] as borrowed slice.
40	fn get_funded_item(&self) -> &[FundedItemProperty];
41	/// Take <https://schema.org/fundedItem> from [`Self`] as owned vector.
42	fn take_funded_item(&mut self) -> Vec<FundedItemProperty>;
43	/// Get <https://schema.org/funder> from [`Self`] as borrowed slice.
44	fn get_funder(&self) -> &[FunderProperty];
45	/// Take <https://schema.org/funder> from [`Self`] as owned vector.
46	fn take_funder(&mut self) -> Vec<FunderProperty>;
47	/// Get <https://schema.org/sponsor> from [`Self`] as borrowed slice.
48	fn get_sponsor(&self) -> &[SponsorProperty];
49	/// Take <https://schema.org/sponsor> from [`Self`] as owned vector.
50	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}