schema_org_types/schemas/classes/
opening_hours_specification.rs

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