schema_org_types/schemas/classes/
warranty_promise.rs

1use super::*;
2/// <https://schema.org/WarrantyPromise>
3#[cfg_attr(feature = "derive-debug", derive(Debug))]
4#[cfg_attr(feature = "derive-clone", derive(Clone))]
5pub struct WarrantyPromise {
6	/// <https://schema.org/durationOfWarranty>
7	pub r#duration_of_warranty: Vec<DurationOfWarrantyProperty>,
8	/// <https://schema.org/warrantyScope>
9	pub r#warranty_scope: Vec<WarrantyScopeProperty>,
10	/// <https://schema.org/additionalType>
11	pub r#additional_type: Vec<AdditionalTypeProperty>,
12	/// <https://schema.org/alternateName>
13	pub r#alternate_name: Vec<AlternateNameProperty>,
14	/// <https://schema.org/description>
15	pub r#description: Vec<DescriptionProperty>,
16	/// <https://schema.org/disambiguatingDescription>
17	pub r#disambiguating_description: Vec<DisambiguatingDescriptionProperty>,
18	/// <https://schema.org/identifier>
19	pub r#identifier: Vec<IdentifierProperty>,
20	/// <https://schema.org/image>
21	pub r#image: Vec<ImageProperty>,
22	/// <https://schema.org/mainEntityOfPage>
23	pub r#main_entity_of_page: Vec<MainEntityOfPageProperty>,
24	/// <https://schema.org/name>
25	pub r#name: Vec<NameProperty>,
26	/// <https://schema.org/potentialAction>
27	pub r#potential_action: Vec<PotentialActionProperty>,
28	/// <https://schema.org/sameAs>
29	pub r#same_as: Vec<SameAsProperty>,
30	/// <https://schema.org/subjectOf>
31	pub r#subject_of: Vec<SubjectOfProperty>,
32	/// <https://schema.org/url>
33	pub r#url: Vec<UrlProperty>,
34}
35/// This trait is for properties from <https://schema.org/WarrantyPromise>.
36pub trait WarrantyPromiseTrait {
37	/// Get <https://schema.org/durationOfWarranty> from [`Self`] as borrowed slice.
38	fn get_duration_of_warranty(&self) -> &[DurationOfWarrantyProperty];
39	/// Take <https://schema.org/durationOfWarranty> from [`Self`] as owned vector.
40	fn take_duration_of_warranty(&mut self) -> Vec<DurationOfWarrantyProperty>;
41	/// Get <https://schema.org/warrantyScope> from [`Self`] as borrowed slice.
42	fn get_warranty_scope(&self) -> &[WarrantyScopeProperty];
43	/// Take <https://schema.org/warrantyScope> from [`Self`] as owned vector.
44	fn take_warranty_scope(&mut self) -> Vec<WarrantyScopeProperty>;
45}
46impl WarrantyPromiseTrait for WarrantyPromise {
47	fn get_duration_of_warranty(&self) -> &[DurationOfWarrantyProperty] {
48		self.r#duration_of_warranty.as_slice()
49	}
50	fn take_duration_of_warranty(&mut self) -> Vec<DurationOfWarrantyProperty> {
51		std::mem::take(&mut self.r#duration_of_warranty)
52	}
53	fn get_warranty_scope(&self) -> &[WarrantyScopeProperty] {
54		self.r#warranty_scope.as_slice()
55	}
56	fn take_warranty_scope(&mut self) -> Vec<WarrantyScopeProperty> {
57		std::mem::take(&mut self.r#warranty_scope)
58	}
59}
60impl StructuredValueTrait for WarrantyPromise {}
61impl ThingTrait for WarrantyPromise {
62	fn get_additional_type(&self) -> &[AdditionalTypeProperty] {
63		self.r#additional_type.as_slice()
64	}
65	fn take_additional_type(&mut self) -> Vec<AdditionalTypeProperty> {
66		std::mem::take(&mut self.r#additional_type)
67	}
68	fn get_alternate_name(&self) -> &[AlternateNameProperty] {
69		self.r#alternate_name.as_slice()
70	}
71	fn take_alternate_name(&mut self) -> Vec<AlternateNameProperty> {
72		std::mem::take(&mut self.r#alternate_name)
73	}
74	fn get_description(&self) -> &[DescriptionProperty] {
75		self.r#description.as_slice()
76	}
77	fn take_description(&mut self) -> Vec<DescriptionProperty> {
78		std::mem::take(&mut self.r#description)
79	}
80	fn get_disambiguating_description(&self) -> &[DisambiguatingDescriptionProperty] {
81		self.r#disambiguating_description.as_slice()
82	}
83	fn take_disambiguating_description(&mut self) -> Vec<DisambiguatingDescriptionProperty> {
84		std::mem::take(&mut self.r#disambiguating_description)
85	}
86	fn get_identifier(&self) -> &[IdentifierProperty] {
87		self.r#identifier.as_slice()
88	}
89	fn take_identifier(&mut self) -> Vec<IdentifierProperty> {
90		std::mem::take(&mut self.r#identifier)
91	}
92	fn get_image(&self) -> &[ImageProperty] {
93		self.r#image.as_slice()
94	}
95	fn take_image(&mut self) -> Vec<ImageProperty> {
96		std::mem::take(&mut self.r#image)
97	}
98	fn get_main_entity_of_page(&self) -> &[MainEntityOfPageProperty] {
99		self.r#main_entity_of_page.as_slice()
100	}
101	fn take_main_entity_of_page(&mut self) -> Vec<MainEntityOfPageProperty> {
102		std::mem::take(&mut self.r#main_entity_of_page)
103	}
104	fn get_name(&self) -> &[NameProperty] {
105		self.r#name.as_slice()
106	}
107	fn take_name(&mut self) -> Vec<NameProperty> {
108		std::mem::take(&mut self.r#name)
109	}
110	fn get_potential_action(&self) -> &[PotentialActionProperty] {
111		self.r#potential_action.as_slice()
112	}
113	fn take_potential_action(&mut self) -> Vec<PotentialActionProperty> {
114		std::mem::take(&mut self.r#potential_action)
115	}
116	fn get_same_as(&self) -> &[SameAsProperty] {
117		self.r#same_as.as_slice()
118	}
119	fn take_same_as(&mut self) -> Vec<SameAsProperty> {
120		std::mem::take(&mut self.r#same_as)
121	}
122	fn get_subject_of(&self) -> &[SubjectOfProperty] {
123		self.r#subject_of.as_slice()
124	}
125	fn take_subject_of(&mut self) -> Vec<SubjectOfProperty> {
126		std::mem::take(&mut self.r#subject_of)
127	}
128	fn get_url(&self) -> &[UrlProperty] {
129		self.r#url.as_slice()
130	}
131	fn take_url(&mut self) -> Vec<UrlProperty> {
132		std::mem::take(&mut self.r#url)
133	}
134}
135#[cfg(feature = "serde")]
136mod serde {
137	use std::{fmt, fmt::Formatter};
138
139	use ::serde::{
140		de, de::Visitor, ser::SerializeStruct, Deserialize, Deserializer, Serialize, Serializer,
141	};
142
143	use super::*;
144	impl Serialize for WarrantyPromise {
145		fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
146		where
147			S: Serializer,
148		{
149			let len: usize = [
150				!Vec::is_empty(&self.r#duration_of_warranty) as usize,
151				!Vec::is_empty(&self.r#warranty_scope) as usize,
152				!Vec::is_empty(&self.r#additional_type) as usize,
153				!Vec::is_empty(&self.r#alternate_name) as usize,
154				!Vec::is_empty(&self.r#description) as usize,
155				!Vec::is_empty(&self.r#disambiguating_description) as usize,
156				!Vec::is_empty(&self.r#identifier) as usize,
157				!Vec::is_empty(&self.r#image) as usize,
158				!Vec::is_empty(&self.r#main_entity_of_page) as usize,
159				!Vec::is_empty(&self.r#name) as usize,
160				!Vec::is_empty(&self.r#potential_action) as usize,
161				!Vec::is_empty(&self.r#same_as) as usize,
162				!Vec::is_empty(&self.r#subject_of) as usize,
163				!Vec::is_empty(&self.r#url) as usize,
164			]
165			.iter()
166			.sum();
167			let mut serialize_struct =
168				Serializer::serialize_struct(serializer, "WarrantyPromise", len)?;
169			if !Vec::is_empty(&self.r#duration_of_warranty) {
170				serialize_struct.serialize_field("durationOfWarranty", {
171					struct SerializeWith<'a>(&'a Vec<DurationOfWarrantyProperty>);
172					impl<'a> Serialize for SerializeWith<'a> {
173						fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
174						where
175							S: Serializer,
176						{
177							serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
178								self.0, serializer,
179							)
180						}
181					}
182					&SerializeWith(&self.r#duration_of_warranty)
183				})?;
184			} else {
185				serialize_struct.skip_field("durationOfWarranty")?;
186			}
187			if !Vec::is_empty(&self.r#warranty_scope) {
188				serialize_struct.serialize_field("warrantyScope", {
189					struct SerializeWith<'a>(&'a Vec<WarrantyScopeProperty>);
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#warranty_scope)
201				})?;
202			} else {
203				serialize_struct.skip_field("warrantyScope")?;
204			}
205			if !Vec::is_empty(&self.r#additional_type) {
206				serialize_struct.serialize_field("additionalType", {
207					struct SerializeWith<'a>(&'a Vec<AdditionalTypeProperty>);
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#additional_type)
219				})?;
220			} else {
221				serialize_struct.skip_field("additionalType")?;
222			}
223			if !Vec::is_empty(&self.r#alternate_name) {
224				serialize_struct.serialize_field("alternateName", {
225					struct SerializeWith<'a>(&'a Vec<AlternateNameProperty>);
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#alternate_name)
237				})?;
238			} else {
239				serialize_struct.skip_field("alternateName")?;
240			}
241			if !Vec::is_empty(&self.r#description) {
242				serialize_struct.serialize_field("description", {
243					struct SerializeWith<'a>(&'a Vec<DescriptionProperty>);
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#description)
255				})?;
256			} else {
257				serialize_struct.skip_field("description")?;
258			}
259			if !Vec::is_empty(&self.r#disambiguating_description) {
260				serialize_struct.serialize_field("disambiguatingDescription", {
261					struct SerializeWith<'a>(&'a Vec<DisambiguatingDescriptionProperty>);
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#disambiguating_description)
273				})?;
274			} else {
275				serialize_struct.skip_field("disambiguatingDescription")?;
276			}
277			if !Vec::is_empty(&self.r#identifier) {
278				serialize_struct.serialize_field("identifier", {
279					struct SerializeWith<'a>(&'a Vec<IdentifierProperty>);
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#identifier)
291				})?;
292			} else {
293				serialize_struct.skip_field("identifier")?;
294			}
295			if !Vec::is_empty(&self.r#image) {
296				serialize_struct.serialize_field("image", {
297					struct SerializeWith<'a>(&'a Vec<ImageProperty>);
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#image)
309				})?;
310			} else {
311				serialize_struct.skip_field("image")?;
312			}
313			if !Vec::is_empty(&self.r#main_entity_of_page) {
314				serialize_struct.serialize_field("mainEntityOfPage", {
315					struct SerializeWith<'a>(&'a Vec<MainEntityOfPageProperty>);
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#main_entity_of_page)
327				})?;
328			} else {
329				serialize_struct.skip_field("mainEntityOfPage")?;
330			}
331			if !Vec::is_empty(&self.r#name) {
332				serialize_struct.serialize_field("name", {
333					struct SerializeWith<'a>(&'a Vec<NameProperty>);
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#name)
345				})?;
346			} else {
347				serialize_struct.skip_field("name")?;
348			}
349			if !Vec::is_empty(&self.r#potential_action) {
350				serialize_struct.serialize_field("potentialAction", {
351					struct SerializeWith<'a>(&'a Vec<PotentialActionProperty>);
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#potential_action)
363				})?;
364			} else {
365				serialize_struct.skip_field("potentialAction")?;
366			}
367			if !Vec::is_empty(&self.r#same_as) {
368				serialize_struct.serialize_field("sameAs", {
369					struct SerializeWith<'a>(&'a Vec<SameAsProperty>);
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#same_as)
381				})?;
382			} else {
383				serialize_struct.skip_field("sameAs")?;
384			}
385			if !Vec::is_empty(&self.r#subject_of) {
386				serialize_struct.serialize_field("subjectOf", {
387					struct SerializeWith<'a>(&'a Vec<SubjectOfProperty>);
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#subject_of)
399				})?;
400			} else {
401				serialize_struct.skip_field("subjectOf")?;
402			}
403			if !Vec::is_empty(&self.r#url) {
404				serialize_struct.serialize_field("url", {
405					struct SerializeWith<'a>(&'a Vec<UrlProperty>);
406					impl<'a> Serialize for SerializeWith<'a> {
407						fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
408						where
409							S: Serializer,
410						{
411							serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
412								self.0, serializer,
413							)
414						}
415					}
416					&SerializeWith(&self.r#url)
417				})?;
418			} else {
419				serialize_struct.skip_field("url")?;
420			}
421			serialize_struct.end()
422		}
423	}
424	impl<'de> Deserialize<'de> for WarrantyPromise {
425		fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
426		where
427			D: Deserializer<'de>,
428		{
429			enum Field {
430				DurationOfWarranty,
431				WarrantyScope,
432				AdditionalType,
433				AlternateName,
434				Description,
435				DisambiguatingDescription,
436				Identifier,
437				Image,
438				MainEntityOfPage,
439				Name,
440				PotentialAction,
441				SameAs,
442				SubjectOf,
443				Url,
444				Ignore,
445			}
446			struct FieldVisitor;
447			impl<'de> Visitor<'de> for FieldVisitor {
448				type Value = Field;
449				fn expecting(&self, formatter: &mut Formatter) -> fmt::Result {
450					formatter.write_str("field identifier")
451				}
452				fn visit_str<E>(self, value: &str) -> Result<Self::Value, E>
453				where
454					E: de::Error,
455				{
456					match value {
457						"durationOfWarranty" => Ok(Field::DurationOfWarranty),
458						"warrantyScope" => Ok(Field::WarrantyScope),
459						"additionalType" => Ok(Field::AdditionalType),
460						"alternateName" => Ok(Field::AlternateName),
461						"description" => Ok(Field::Description),
462						"disambiguatingDescription" => Ok(Field::DisambiguatingDescription),
463						"identifier" => Ok(Field::Identifier),
464						"image" => Ok(Field::Image),
465						"mainEntityOfPage" => Ok(Field::MainEntityOfPage),
466						"name" => Ok(Field::Name),
467						"potentialAction" => Ok(Field::PotentialAction),
468						"sameAs" => Ok(Field::SameAs),
469						"subjectOf" => Ok(Field::SubjectOf),
470						"url" => Ok(Field::Url),
471						"id" | "type" => Ok(Field::Ignore),
472						_ => Err(de::Error::unknown_field(value, FIELDS)),
473					}
474				}
475				fn visit_bytes<E>(self, value: &[u8]) -> Result<Self::Value, E>
476				where
477					E: de::Error,
478				{
479					match value {
480						b"durationOfWarranty" => Ok(Field::DurationOfWarranty),
481						b"warrantyScope" => Ok(Field::WarrantyScope),
482						b"additionalType" => Ok(Field::AdditionalType),
483						b"alternateName" => Ok(Field::AlternateName),
484						b"description" => Ok(Field::Description),
485						b"disambiguatingDescription" => Ok(Field::DisambiguatingDescription),
486						b"identifier" => Ok(Field::Identifier),
487						b"image" => Ok(Field::Image),
488						b"mainEntityOfPage" => Ok(Field::MainEntityOfPage),
489						b"name" => Ok(Field::Name),
490						b"potentialAction" => Ok(Field::PotentialAction),
491						b"sameAs" => Ok(Field::SameAs),
492						b"subjectOf" => Ok(Field::SubjectOf),
493						b"url" => Ok(Field::Url),
494						b"id" | b"type" => Ok(Field::Ignore),
495						_ => {
496							let value = &String::from_utf8_lossy(value);
497							Err(de::Error::unknown_field(value, FIELDS))
498						}
499					}
500				}
501			}
502			impl<'de> Deserialize<'de> for Field {
503				fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
504				where
505					D: Deserializer<'de>,
506				{
507					deserializer.deserialize_identifier(FieldVisitor)
508				}
509			}
510			struct ClassVisitor;
511			impl<'de> Visitor<'de> for ClassVisitor {
512				type Value = WarrantyPromise;
513				fn expecting(&self, formatter: &mut Formatter) -> fmt::Result {
514					formatter.write_str("schema.org schema WarrantyPromise")
515				}
516				fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error>
517				where
518					A: de::MapAccess<'de>,
519				{
520					let mut r#duration_of_warranty_property = None;
521					let mut r#warranty_scope_property = None;
522					let mut r#additional_type_property = None;
523					let mut r#alternate_name_property = None;
524					let mut r#description_property = None;
525					let mut r#disambiguating_description_property = None;
526					let mut r#identifier_property = None;
527					let mut r#image_property = None;
528					let mut r#main_entity_of_page_property = None;
529					let mut r#name_property = None;
530					let mut r#potential_action_property = None;
531					let mut r#same_as_property = None;
532					let mut r#subject_of_property = None;
533					let mut r#url_property = None;
534					while let Some(key) = map.next_key::<Field>()? {
535						match key {
536							Field::DurationOfWarranty => {
537								if r#duration_of_warranty_property.is_some() {
538									return Err(<A::Error as de::Error>::duplicate_field(
539										"durationOfWarranty",
540									));
541								}
542								r#duration_of_warranty_property = Some({
543									struct DeserializeWith(Vec<DurationOfWarrantyProperty>);
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::WarrantyScope => {
563								if r#warranty_scope_property.is_some() {
564									return Err(<A::Error as de::Error>::duplicate_field(
565										"warrantyScope",
566									));
567								}
568								r#warranty_scope_property = Some({
569									struct DeserializeWith(Vec<WarrantyScopeProperty>);
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::AdditionalType => {
589								if r#additional_type_property.is_some() {
590									return Err(<A::Error as de::Error>::duplicate_field(
591										"additionalType",
592									));
593								}
594								r#additional_type_property = Some({
595									struct DeserializeWith(Vec<AdditionalTypeProperty>);
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::AlternateName => {
615								if r#alternate_name_property.is_some() {
616									return Err(<A::Error as de::Error>::duplicate_field(
617										"alternateName",
618									));
619								}
620								r#alternate_name_property = Some({
621									struct DeserializeWith(Vec<AlternateNameProperty>);
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::Description => {
641								if r#description_property.is_some() {
642									return Err(<A::Error as de::Error>::duplicate_field(
643										"description",
644									));
645								}
646								r#description_property = Some({
647									struct DeserializeWith(Vec<DescriptionProperty>);
648									impl<'de> Deserialize<'de> for DeserializeWith {
649										fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
650										where
651											D: Deserializer<'de>,
652										{
653											Ok(DeserializeWith(serde_with::As::<
654												serde_with::OneOrMany<serde_with::Same>,
655											>::deserialize(deserializer)?))
656										}
657									}
658									match map.next_value::<DeserializeWith>() {
659										Ok(deserialize_with) => deserialize_with.0,
660										Err(err) => {
661											return Err(err);
662										}
663									}
664								});
665							}
666							Field::DisambiguatingDescription => {
667								if r#disambiguating_description_property.is_some() {
668									return Err(<A::Error as de::Error>::duplicate_field(
669										"disambiguatingDescription",
670									));
671								}
672								r#disambiguating_description_property = Some({
673									struct DeserializeWith(Vec<DisambiguatingDescriptionProperty>);
674									impl<'de> Deserialize<'de> for DeserializeWith {
675										fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
676										where
677											D: Deserializer<'de>,
678										{
679											Ok(DeserializeWith(serde_with::As::<
680												serde_with::OneOrMany<serde_with::Same>,
681											>::deserialize(deserializer)?))
682										}
683									}
684									match map.next_value::<DeserializeWith>() {
685										Ok(deserialize_with) => deserialize_with.0,
686										Err(err) => {
687											return Err(err);
688										}
689									}
690								});
691							}
692							Field::Identifier => {
693								if r#identifier_property.is_some() {
694									return Err(<A::Error as de::Error>::duplicate_field(
695										"identifier",
696									));
697								}
698								r#identifier_property = Some({
699									struct DeserializeWith(Vec<IdentifierProperty>);
700									impl<'de> Deserialize<'de> for DeserializeWith {
701										fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
702										where
703											D: Deserializer<'de>,
704										{
705											Ok(DeserializeWith(serde_with::As::<
706												serde_with::OneOrMany<serde_with::Same>,
707											>::deserialize(deserializer)?))
708										}
709									}
710									match map.next_value::<DeserializeWith>() {
711										Ok(deserialize_with) => deserialize_with.0,
712										Err(err) => {
713											return Err(err);
714										}
715									}
716								});
717							}
718							Field::Image => {
719								if r#image_property.is_some() {
720									return Err(<A::Error as de::Error>::duplicate_field("image"));
721								}
722								r#image_property = Some({
723									struct DeserializeWith(Vec<ImageProperty>);
724									impl<'de> Deserialize<'de> for DeserializeWith {
725										fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
726										where
727											D: Deserializer<'de>,
728										{
729											Ok(DeserializeWith(serde_with::As::<
730												serde_with::OneOrMany<serde_with::Same>,
731											>::deserialize(deserializer)?))
732										}
733									}
734									match map.next_value::<DeserializeWith>() {
735										Ok(deserialize_with) => deserialize_with.0,
736										Err(err) => {
737											return Err(err);
738										}
739									}
740								});
741							}
742							Field::MainEntityOfPage => {
743								if r#main_entity_of_page_property.is_some() {
744									return Err(<A::Error as de::Error>::duplicate_field(
745										"mainEntityOfPage",
746									));
747								}
748								r#main_entity_of_page_property = Some({
749									struct DeserializeWith(Vec<MainEntityOfPageProperty>);
750									impl<'de> Deserialize<'de> for DeserializeWith {
751										fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
752										where
753											D: Deserializer<'de>,
754										{
755											Ok(DeserializeWith(serde_with::As::<
756												serde_with::OneOrMany<serde_with::Same>,
757											>::deserialize(deserializer)?))
758										}
759									}
760									match map.next_value::<DeserializeWith>() {
761										Ok(deserialize_with) => deserialize_with.0,
762										Err(err) => {
763											return Err(err);
764										}
765									}
766								});
767							}
768							Field::Name => {
769								if r#name_property.is_some() {
770									return Err(<A::Error as de::Error>::duplicate_field("name"));
771								}
772								r#name_property = Some({
773									struct DeserializeWith(Vec<NameProperty>);
774									impl<'de> Deserialize<'de> for DeserializeWith {
775										fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
776										where
777											D: Deserializer<'de>,
778										{
779											Ok(DeserializeWith(serde_with::As::<
780												serde_with::OneOrMany<serde_with::Same>,
781											>::deserialize(deserializer)?))
782										}
783									}
784									match map.next_value::<DeserializeWith>() {
785										Ok(deserialize_with) => deserialize_with.0,
786										Err(err) => {
787											return Err(err);
788										}
789									}
790								});
791							}
792							Field::PotentialAction => {
793								if r#potential_action_property.is_some() {
794									return Err(<A::Error as de::Error>::duplicate_field(
795										"potentialAction",
796									));
797								}
798								r#potential_action_property = Some({
799									struct DeserializeWith(Vec<PotentialActionProperty>);
800									impl<'de> Deserialize<'de> for DeserializeWith {
801										fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
802										where
803											D: Deserializer<'de>,
804										{
805											Ok(DeserializeWith(serde_with::As::<
806												serde_with::OneOrMany<serde_with::Same>,
807											>::deserialize(deserializer)?))
808										}
809									}
810									match map.next_value::<DeserializeWith>() {
811										Ok(deserialize_with) => deserialize_with.0,
812										Err(err) => {
813											return Err(err);
814										}
815									}
816								});
817							}
818							Field::SameAs => {
819								if r#same_as_property.is_some() {
820									return Err(<A::Error as de::Error>::duplicate_field("sameAs"));
821								}
822								r#same_as_property = Some({
823									struct DeserializeWith(Vec<SameAsProperty>);
824									impl<'de> Deserialize<'de> for DeserializeWith {
825										fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
826										where
827											D: Deserializer<'de>,
828										{
829											Ok(DeserializeWith(serde_with::As::<
830												serde_with::OneOrMany<serde_with::Same>,
831											>::deserialize(deserializer)?))
832										}
833									}
834									match map.next_value::<DeserializeWith>() {
835										Ok(deserialize_with) => deserialize_with.0,
836										Err(err) => {
837											return Err(err);
838										}
839									}
840								});
841							}
842							Field::SubjectOf => {
843								if r#subject_of_property.is_some() {
844									return Err(<A::Error as de::Error>::duplicate_field(
845										"subjectOf",
846									));
847								}
848								r#subject_of_property = Some({
849									struct DeserializeWith(Vec<SubjectOfProperty>);
850									impl<'de> Deserialize<'de> for DeserializeWith {
851										fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
852										where
853											D: Deserializer<'de>,
854										{
855											Ok(DeserializeWith(serde_with::As::<
856												serde_with::OneOrMany<serde_with::Same>,
857											>::deserialize(deserializer)?))
858										}
859									}
860									match map.next_value::<DeserializeWith>() {
861										Ok(deserialize_with) => deserialize_with.0,
862										Err(err) => {
863											return Err(err);
864										}
865									}
866								});
867							}
868							Field::Url => {
869								if r#url_property.is_some() {
870									return Err(<A::Error as de::Error>::duplicate_field("url"));
871								}
872								r#url_property = Some({
873									struct DeserializeWith(Vec<UrlProperty>);
874									impl<'de> Deserialize<'de> for DeserializeWith {
875										fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
876										where
877											D: Deserializer<'de>,
878										{
879											Ok(DeserializeWith(serde_with::As::<
880												serde_with::OneOrMany<serde_with::Same>,
881											>::deserialize(deserializer)?))
882										}
883									}
884									match map.next_value::<DeserializeWith>() {
885										Ok(deserialize_with) => deserialize_with.0,
886										Err(err) => {
887											return Err(err);
888										}
889									}
890								});
891							}
892							Field::Ignore => {
893								let _ = map.next_value::<de::IgnoredAny>()?;
894							}
895						}
896					}
897					Ok(WarrantyPromise {
898						r#duration_of_warranty: r#duration_of_warranty_property.unwrap_or_default(),
899						r#warranty_scope: r#warranty_scope_property.unwrap_or_default(),
900						r#additional_type: r#additional_type_property.unwrap_or_default(),
901						r#alternate_name: r#alternate_name_property.unwrap_or_default(),
902						r#description: r#description_property.unwrap_or_default(),
903						r#disambiguating_description: r#disambiguating_description_property
904							.unwrap_or_default(),
905						r#identifier: r#identifier_property.unwrap_or_default(),
906						r#image: r#image_property.unwrap_or_default(),
907						r#main_entity_of_page: r#main_entity_of_page_property.unwrap_or_default(),
908						r#name: r#name_property.unwrap_or_default(),
909						r#potential_action: r#potential_action_property.unwrap_or_default(),
910						r#same_as: r#same_as_property.unwrap_or_default(),
911						r#subject_of: r#subject_of_property.unwrap_or_default(),
912						r#url: r#url_property.unwrap_or_default(),
913					})
914				}
915			}
916			const FIELDS: &[&str] = &[
917				"durationOfWarranty",
918				"warrantyScope",
919				"additionalType",
920				"alternateName",
921				"description",
922				"disambiguatingDescription",
923				"identifier",
924				"image",
925				"mainEntityOfPage",
926				"name",
927				"potentialAction",
928				"sameAs",
929				"subjectOf",
930				"url",
931			];
932			deserializer.deserialize_struct("WarrantyPromise", FIELDS, ClassVisitor)
933		}
934	}
935}