1use super::*;
2#[cfg_attr(feature = "derive-debug", derive(Debug))]
4#[cfg_attr(feature = "derive-clone", derive(Clone))]
5pub struct OpeningHoursSpecification {
6 pub r#closes: Vec<ClosesProperty>,
8 pub r#day_of_week: Vec<DayOfWeekProperty>,
10 pub r#opens: Vec<OpensProperty>,
12 pub r#valid_from: Vec<ValidFromProperty>,
14 pub r#valid_through: Vec<ValidThroughProperty>,
16 pub r#additional_type: Vec<AdditionalTypeProperty>,
18 pub r#alternate_name: Vec<AlternateNameProperty>,
20 pub r#description: Vec<DescriptionProperty>,
22 pub r#disambiguating_description: Vec<DisambiguatingDescriptionProperty>,
24 pub r#identifier: Vec<IdentifierProperty>,
26 pub r#image: Vec<ImageProperty>,
28 pub r#main_entity_of_page: Vec<MainEntityOfPageProperty>,
30 pub r#name: Vec<NameProperty>,
32 pub r#potential_action: Vec<PotentialActionProperty>,
34 pub r#same_as: Vec<SameAsProperty>,
36 pub r#subject_of: Vec<SubjectOfProperty>,
38 pub r#url: Vec<UrlProperty>,
40}
41pub trait OpeningHoursSpecificationTrait {
43 fn get_closes(&self) -> &[ClosesProperty];
45 fn take_closes(&mut self) -> Vec<ClosesProperty>;
47 fn get_day_of_week(&self) -> &[DayOfWeekProperty];
49 fn take_day_of_week(&mut self) -> Vec<DayOfWeekProperty>;
51 fn get_opens(&self) -> &[OpensProperty];
53 fn take_opens(&mut self) -> Vec<OpensProperty>;
55 fn get_valid_from(&self) -> &[ValidFromProperty];
57 fn take_valid_from(&mut self) -> Vec<ValidFromProperty>;
59 fn get_valid_through(&self) -> &[ValidThroughProperty];
61 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}