1use super::*;
2#[cfg_attr(feature = "derive-debug", derive(Debug))]
4#[cfg_attr(feature = "derive-clone", derive(Clone))]
5pub struct CompoundPriceSpecification {
6 pub r#price_component: Vec<PriceComponentProperty>,
8 pub r#price_type: Vec<PriceTypeProperty>,
10 pub r#eligible_quantity: Vec<EligibleQuantityProperty>,
12 pub r#eligible_transaction_volume: Vec<EligibleTransactionVolumeProperty>,
14 pub r#max_price: Vec<MaxPriceProperty>,
16 pub r#min_price: Vec<MinPriceProperty>,
18 pub r#price: Vec<PriceProperty>,
20 pub r#price_currency: Vec<PriceCurrencyProperty>,
22 pub r#valid_from: Vec<ValidFromProperty>,
24 pub r#valid_through: Vec<ValidThroughProperty>,
26 pub r#value_added_tax_included: Vec<ValueAddedTaxIncludedProperty>,
28 pub r#additional_type: Vec<AdditionalTypeProperty>,
30 pub r#alternate_name: Vec<AlternateNameProperty>,
32 pub r#description: Vec<DescriptionProperty>,
34 pub r#disambiguating_description: Vec<DisambiguatingDescriptionProperty>,
36 pub r#identifier: Vec<IdentifierProperty>,
38 pub r#image: Vec<ImageProperty>,
40 pub r#main_entity_of_page: Vec<MainEntityOfPageProperty>,
42 pub r#name: Vec<NameProperty>,
44 pub r#potential_action: Vec<PotentialActionProperty>,
46 pub r#same_as: Vec<SameAsProperty>,
48 pub r#subject_of: Vec<SubjectOfProperty>,
50 pub r#url: Vec<UrlProperty>,
52}
53pub trait CompoundPriceSpecificationTrait {
55 fn get_price_component(&self) -> &[PriceComponentProperty];
57 fn take_price_component(&mut self) -> Vec<PriceComponentProperty>;
59 fn get_price_type(&self) -> &[PriceTypeProperty];
61 fn take_price_type(&mut self) -> Vec<PriceTypeProperty>;
63}
64impl CompoundPriceSpecificationTrait for CompoundPriceSpecification {
65 fn get_price_component(&self) -> &[PriceComponentProperty] {
66 self.r#price_component.as_slice()
67 }
68 fn take_price_component(&mut self) -> Vec<PriceComponentProperty> {
69 std::mem::take(&mut self.r#price_component)
70 }
71 fn get_price_type(&self) -> &[PriceTypeProperty] {
72 self.r#price_type.as_slice()
73 }
74 fn take_price_type(&mut self) -> Vec<PriceTypeProperty> {
75 std::mem::take(&mut self.r#price_type)
76 }
77}
78impl PriceSpecificationTrait for CompoundPriceSpecification {
79 fn get_eligible_quantity(&self) -> &[EligibleQuantityProperty] {
80 self.r#eligible_quantity.as_slice()
81 }
82 fn take_eligible_quantity(&mut self) -> Vec<EligibleQuantityProperty> {
83 std::mem::take(&mut self.r#eligible_quantity)
84 }
85 fn get_eligible_transaction_volume(&self) -> &[EligibleTransactionVolumeProperty] {
86 self.r#eligible_transaction_volume.as_slice()
87 }
88 fn take_eligible_transaction_volume(&mut self) -> Vec<EligibleTransactionVolumeProperty> {
89 std::mem::take(&mut self.r#eligible_transaction_volume)
90 }
91 fn get_max_price(&self) -> &[MaxPriceProperty] {
92 self.r#max_price.as_slice()
93 }
94 fn take_max_price(&mut self) -> Vec<MaxPriceProperty> {
95 std::mem::take(&mut self.r#max_price)
96 }
97 fn get_min_price(&self) -> &[MinPriceProperty] {
98 self.r#min_price.as_slice()
99 }
100 fn take_min_price(&mut self) -> Vec<MinPriceProperty> {
101 std::mem::take(&mut self.r#min_price)
102 }
103 fn get_price(&self) -> &[PriceProperty] {
104 self.r#price.as_slice()
105 }
106 fn take_price(&mut self) -> Vec<PriceProperty> {
107 std::mem::take(&mut self.r#price)
108 }
109 fn get_price_currency(&self) -> &[PriceCurrencyProperty] {
110 self.r#price_currency.as_slice()
111 }
112 fn take_price_currency(&mut self) -> Vec<PriceCurrencyProperty> {
113 std::mem::take(&mut self.r#price_currency)
114 }
115 fn get_valid_from(&self) -> &[ValidFromProperty] {
116 self.r#valid_from.as_slice()
117 }
118 fn take_valid_from(&mut self) -> Vec<ValidFromProperty> {
119 std::mem::take(&mut self.r#valid_from)
120 }
121 fn get_valid_through(&self) -> &[ValidThroughProperty] {
122 self.r#valid_through.as_slice()
123 }
124 fn take_valid_through(&mut self) -> Vec<ValidThroughProperty> {
125 std::mem::take(&mut self.r#valid_through)
126 }
127 fn get_value_added_tax_included(&self) -> &[ValueAddedTaxIncludedProperty] {
128 self.r#value_added_tax_included.as_slice()
129 }
130 fn take_value_added_tax_included(&mut self) -> Vec<ValueAddedTaxIncludedProperty> {
131 std::mem::take(&mut self.r#value_added_tax_included)
132 }
133}
134impl StructuredValueTrait for CompoundPriceSpecification {}
135impl ThingTrait for CompoundPriceSpecification {
136 fn get_additional_type(&self) -> &[AdditionalTypeProperty] {
137 self.r#additional_type.as_slice()
138 }
139 fn take_additional_type(&mut self) -> Vec<AdditionalTypeProperty> {
140 std::mem::take(&mut self.r#additional_type)
141 }
142 fn get_alternate_name(&self) -> &[AlternateNameProperty] {
143 self.r#alternate_name.as_slice()
144 }
145 fn take_alternate_name(&mut self) -> Vec<AlternateNameProperty> {
146 std::mem::take(&mut self.r#alternate_name)
147 }
148 fn get_description(&self) -> &[DescriptionProperty] {
149 self.r#description.as_slice()
150 }
151 fn take_description(&mut self) -> Vec<DescriptionProperty> {
152 std::mem::take(&mut self.r#description)
153 }
154 fn get_disambiguating_description(&self) -> &[DisambiguatingDescriptionProperty] {
155 self.r#disambiguating_description.as_slice()
156 }
157 fn take_disambiguating_description(&mut self) -> Vec<DisambiguatingDescriptionProperty> {
158 std::mem::take(&mut self.r#disambiguating_description)
159 }
160 fn get_identifier(&self) -> &[IdentifierProperty] {
161 self.r#identifier.as_slice()
162 }
163 fn take_identifier(&mut self) -> Vec<IdentifierProperty> {
164 std::mem::take(&mut self.r#identifier)
165 }
166 fn get_image(&self) -> &[ImageProperty] {
167 self.r#image.as_slice()
168 }
169 fn take_image(&mut self) -> Vec<ImageProperty> {
170 std::mem::take(&mut self.r#image)
171 }
172 fn get_main_entity_of_page(&self) -> &[MainEntityOfPageProperty] {
173 self.r#main_entity_of_page.as_slice()
174 }
175 fn take_main_entity_of_page(&mut self) -> Vec<MainEntityOfPageProperty> {
176 std::mem::take(&mut self.r#main_entity_of_page)
177 }
178 fn get_name(&self) -> &[NameProperty] {
179 self.r#name.as_slice()
180 }
181 fn take_name(&mut self) -> Vec<NameProperty> {
182 std::mem::take(&mut self.r#name)
183 }
184 fn get_potential_action(&self) -> &[PotentialActionProperty] {
185 self.r#potential_action.as_slice()
186 }
187 fn take_potential_action(&mut self) -> Vec<PotentialActionProperty> {
188 std::mem::take(&mut self.r#potential_action)
189 }
190 fn get_same_as(&self) -> &[SameAsProperty] {
191 self.r#same_as.as_slice()
192 }
193 fn take_same_as(&mut self) -> Vec<SameAsProperty> {
194 std::mem::take(&mut self.r#same_as)
195 }
196 fn get_subject_of(&self) -> &[SubjectOfProperty] {
197 self.r#subject_of.as_slice()
198 }
199 fn take_subject_of(&mut self) -> Vec<SubjectOfProperty> {
200 std::mem::take(&mut self.r#subject_of)
201 }
202 fn get_url(&self) -> &[UrlProperty] {
203 self.r#url.as_slice()
204 }
205 fn take_url(&mut self) -> Vec<UrlProperty> {
206 std::mem::take(&mut self.r#url)
207 }
208}
209#[cfg(feature = "serde")]
210mod serde {
211 use std::{fmt, fmt::Formatter};
212
213 use ::serde::{
214 de, de::Visitor, ser::SerializeStruct, Deserialize, Deserializer, Serialize, Serializer,
215 };
216
217 use super::*;
218 impl Serialize for CompoundPriceSpecification {
219 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
220 where
221 S: Serializer,
222 {
223 let len: usize = [
224 !Vec::is_empty(&self.r#price_component) as usize,
225 !Vec::is_empty(&self.r#price_type) as usize,
226 !Vec::is_empty(&self.r#eligible_quantity) as usize,
227 !Vec::is_empty(&self.r#eligible_transaction_volume) as usize,
228 !Vec::is_empty(&self.r#max_price) as usize,
229 !Vec::is_empty(&self.r#min_price) as usize,
230 !Vec::is_empty(&self.r#price) as usize,
231 !Vec::is_empty(&self.r#price_currency) as usize,
232 !Vec::is_empty(&self.r#valid_from) as usize,
233 !Vec::is_empty(&self.r#valid_through) as usize,
234 !Vec::is_empty(&self.r#value_added_tax_included) as usize,
235 !Vec::is_empty(&self.r#additional_type) as usize,
236 !Vec::is_empty(&self.r#alternate_name) as usize,
237 !Vec::is_empty(&self.r#description) as usize,
238 !Vec::is_empty(&self.r#disambiguating_description) as usize,
239 !Vec::is_empty(&self.r#identifier) as usize,
240 !Vec::is_empty(&self.r#image) as usize,
241 !Vec::is_empty(&self.r#main_entity_of_page) as usize,
242 !Vec::is_empty(&self.r#name) as usize,
243 !Vec::is_empty(&self.r#potential_action) as usize,
244 !Vec::is_empty(&self.r#same_as) as usize,
245 !Vec::is_empty(&self.r#subject_of) as usize,
246 !Vec::is_empty(&self.r#url) as usize,
247 ]
248 .iter()
249 .sum();
250 let mut serialize_struct =
251 Serializer::serialize_struct(serializer, "CompoundPriceSpecification", len)?;
252 if !Vec::is_empty(&self.r#price_component) {
253 serialize_struct.serialize_field("priceComponent", {
254 struct SerializeWith<'a>(&'a Vec<PriceComponentProperty>);
255 impl<'a> Serialize for SerializeWith<'a> {
256 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
257 where
258 S: Serializer,
259 {
260 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
261 self.0, serializer,
262 )
263 }
264 }
265 &SerializeWith(&self.r#price_component)
266 })?;
267 } else {
268 serialize_struct.skip_field("priceComponent")?;
269 }
270 if !Vec::is_empty(&self.r#price_type) {
271 serialize_struct.serialize_field("priceType", {
272 struct SerializeWith<'a>(&'a Vec<PriceTypeProperty>);
273 impl<'a> Serialize for SerializeWith<'a> {
274 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
275 where
276 S: Serializer,
277 {
278 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
279 self.0, serializer,
280 )
281 }
282 }
283 &SerializeWith(&self.r#price_type)
284 })?;
285 } else {
286 serialize_struct.skip_field("priceType")?;
287 }
288 if !Vec::is_empty(&self.r#eligible_quantity) {
289 serialize_struct.serialize_field("eligibleQuantity", {
290 struct SerializeWith<'a>(&'a Vec<EligibleQuantityProperty>);
291 impl<'a> Serialize for SerializeWith<'a> {
292 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
293 where
294 S: Serializer,
295 {
296 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
297 self.0, serializer,
298 )
299 }
300 }
301 &SerializeWith(&self.r#eligible_quantity)
302 })?;
303 } else {
304 serialize_struct.skip_field("eligibleQuantity")?;
305 }
306 if !Vec::is_empty(&self.r#eligible_transaction_volume) {
307 serialize_struct.serialize_field("eligibleTransactionVolume", {
308 struct SerializeWith<'a>(&'a Vec<EligibleTransactionVolumeProperty>);
309 impl<'a> Serialize for SerializeWith<'a> {
310 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
311 where
312 S: Serializer,
313 {
314 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
315 self.0, serializer,
316 )
317 }
318 }
319 &SerializeWith(&self.r#eligible_transaction_volume)
320 })?;
321 } else {
322 serialize_struct.skip_field("eligibleTransactionVolume")?;
323 }
324 if !Vec::is_empty(&self.r#max_price) {
325 serialize_struct.serialize_field("maxPrice", {
326 struct SerializeWith<'a>(&'a Vec<MaxPriceProperty>);
327 impl<'a> Serialize for SerializeWith<'a> {
328 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
329 where
330 S: Serializer,
331 {
332 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
333 self.0, serializer,
334 )
335 }
336 }
337 &SerializeWith(&self.r#max_price)
338 })?;
339 } else {
340 serialize_struct.skip_field("maxPrice")?;
341 }
342 if !Vec::is_empty(&self.r#min_price) {
343 serialize_struct.serialize_field("minPrice", {
344 struct SerializeWith<'a>(&'a Vec<MinPriceProperty>);
345 impl<'a> Serialize for SerializeWith<'a> {
346 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
347 where
348 S: Serializer,
349 {
350 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
351 self.0, serializer,
352 )
353 }
354 }
355 &SerializeWith(&self.r#min_price)
356 })?;
357 } else {
358 serialize_struct.skip_field("minPrice")?;
359 }
360 if !Vec::is_empty(&self.r#price) {
361 serialize_struct.serialize_field("price", {
362 struct SerializeWith<'a>(&'a Vec<PriceProperty>);
363 impl<'a> Serialize for SerializeWith<'a> {
364 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
365 where
366 S: Serializer,
367 {
368 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
369 self.0, serializer,
370 )
371 }
372 }
373 &SerializeWith(&self.r#price)
374 })?;
375 } else {
376 serialize_struct.skip_field("price")?;
377 }
378 if !Vec::is_empty(&self.r#price_currency) {
379 serialize_struct.serialize_field("priceCurrency", {
380 struct SerializeWith<'a>(&'a Vec<PriceCurrencyProperty>);
381 impl<'a> Serialize for SerializeWith<'a> {
382 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
383 where
384 S: Serializer,
385 {
386 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
387 self.0, serializer,
388 )
389 }
390 }
391 &SerializeWith(&self.r#price_currency)
392 })?;
393 } else {
394 serialize_struct.skip_field("priceCurrency")?;
395 }
396 if !Vec::is_empty(&self.r#valid_from) {
397 serialize_struct.serialize_field("validFrom", {
398 struct SerializeWith<'a>(&'a Vec<ValidFromProperty>);
399 impl<'a> Serialize for SerializeWith<'a> {
400 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
401 where
402 S: Serializer,
403 {
404 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
405 self.0, serializer,
406 )
407 }
408 }
409 &SerializeWith(&self.r#valid_from)
410 })?;
411 } else {
412 serialize_struct.skip_field("validFrom")?;
413 }
414 if !Vec::is_empty(&self.r#valid_through) {
415 serialize_struct.serialize_field("validThrough", {
416 struct SerializeWith<'a>(&'a Vec<ValidThroughProperty>);
417 impl<'a> Serialize for SerializeWith<'a> {
418 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
419 where
420 S: Serializer,
421 {
422 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
423 self.0, serializer,
424 )
425 }
426 }
427 &SerializeWith(&self.r#valid_through)
428 })?;
429 } else {
430 serialize_struct.skip_field("validThrough")?;
431 }
432 if !Vec::is_empty(&self.r#value_added_tax_included) {
433 serialize_struct.serialize_field("valueAddedTaxIncluded", {
434 struct SerializeWith<'a>(&'a Vec<ValueAddedTaxIncludedProperty>);
435 impl<'a> Serialize for SerializeWith<'a> {
436 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
437 where
438 S: Serializer,
439 {
440 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
441 self.0, serializer,
442 )
443 }
444 }
445 &SerializeWith(&self.r#value_added_tax_included)
446 })?;
447 } else {
448 serialize_struct.skip_field("valueAddedTaxIncluded")?;
449 }
450 if !Vec::is_empty(&self.r#additional_type) {
451 serialize_struct.serialize_field("additionalType", {
452 struct SerializeWith<'a>(&'a Vec<AdditionalTypeProperty>);
453 impl<'a> Serialize for SerializeWith<'a> {
454 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
455 where
456 S: Serializer,
457 {
458 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
459 self.0, serializer,
460 )
461 }
462 }
463 &SerializeWith(&self.r#additional_type)
464 })?;
465 } else {
466 serialize_struct.skip_field("additionalType")?;
467 }
468 if !Vec::is_empty(&self.r#alternate_name) {
469 serialize_struct.serialize_field("alternateName", {
470 struct SerializeWith<'a>(&'a Vec<AlternateNameProperty>);
471 impl<'a> Serialize for SerializeWith<'a> {
472 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
473 where
474 S: Serializer,
475 {
476 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
477 self.0, serializer,
478 )
479 }
480 }
481 &SerializeWith(&self.r#alternate_name)
482 })?;
483 } else {
484 serialize_struct.skip_field("alternateName")?;
485 }
486 if !Vec::is_empty(&self.r#description) {
487 serialize_struct.serialize_field("description", {
488 struct SerializeWith<'a>(&'a Vec<DescriptionProperty>);
489 impl<'a> Serialize for SerializeWith<'a> {
490 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
491 where
492 S: Serializer,
493 {
494 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
495 self.0, serializer,
496 )
497 }
498 }
499 &SerializeWith(&self.r#description)
500 })?;
501 } else {
502 serialize_struct.skip_field("description")?;
503 }
504 if !Vec::is_empty(&self.r#disambiguating_description) {
505 serialize_struct.serialize_field("disambiguatingDescription", {
506 struct SerializeWith<'a>(&'a Vec<DisambiguatingDescriptionProperty>);
507 impl<'a> Serialize for SerializeWith<'a> {
508 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
509 where
510 S: Serializer,
511 {
512 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
513 self.0, serializer,
514 )
515 }
516 }
517 &SerializeWith(&self.r#disambiguating_description)
518 })?;
519 } else {
520 serialize_struct.skip_field("disambiguatingDescription")?;
521 }
522 if !Vec::is_empty(&self.r#identifier) {
523 serialize_struct.serialize_field("identifier", {
524 struct SerializeWith<'a>(&'a Vec<IdentifierProperty>);
525 impl<'a> Serialize for SerializeWith<'a> {
526 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
527 where
528 S: Serializer,
529 {
530 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
531 self.0, serializer,
532 )
533 }
534 }
535 &SerializeWith(&self.r#identifier)
536 })?;
537 } else {
538 serialize_struct.skip_field("identifier")?;
539 }
540 if !Vec::is_empty(&self.r#image) {
541 serialize_struct.serialize_field("image", {
542 struct SerializeWith<'a>(&'a Vec<ImageProperty>);
543 impl<'a> Serialize for SerializeWith<'a> {
544 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
545 where
546 S: Serializer,
547 {
548 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
549 self.0, serializer,
550 )
551 }
552 }
553 &SerializeWith(&self.r#image)
554 })?;
555 } else {
556 serialize_struct.skip_field("image")?;
557 }
558 if !Vec::is_empty(&self.r#main_entity_of_page) {
559 serialize_struct.serialize_field("mainEntityOfPage", {
560 struct SerializeWith<'a>(&'a Vec<MainEntityOfPageProperty>);
561 impl<'a> Serialize for SerializeWith<'a> {
562 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
563 where
564 S: Serializer,
565 {
566 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
567 self.0, serializer,
568 )
569 }
570 }
571 &SerializeWith(&self.r#main_entity_of_page)
572 })?;
573 } else {
574 serialize_struct.skip_field("mainEntityOfPage")?;
575 }
576 if !Vec::is_empty(&self.r#name) {
577 serialize_struct.serialize_field("name", {
578 struct SerializeWith<'a>(&'a Vec<NameProperty>);
579 impl<'a> Serialize for SerializeWith<'a> {
580 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
581 where
582 S: Serializer,
583 {
584 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
585 self.0, serializer,
586 )
587 }
588 }
589 &SerializeWith(&self.r#name)
590 })?;
591 } else {
592 serialize_struct.skip_field("name")?;
593 }
594 if !Vec::is_empty(&self.r#potential_action) {
595 serialize_struct.serialize_field("potentialAction", {
596 struct SerializeWith<'a>(&'a Vec<PotentialActionProperty>);
597 impl<'a> Serialize for SerializeWith<'a> {
598 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
599 where
600 S: Serializer,
601 {
602 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
603 self.0, serializer,
604 )
605 }
606 }
607 &SerializeWith(&self.r#potential_action)
608 })?;
609 } else {
610 serialize_struct.skip_field("potentialAction")?;
611 }
612 if !Vec::is_empty(&self.r#same_as) {
613 serialize_struct.serialize_field("sameAs", {
614 struct SerializeWith<'a>(&'a Vec<SameAsProperty>);
615 impl<'a> Serialize for SerializeWith<'a> {
616 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
617 where
618 S: Serializer,
619 {
620 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
621 self.0, serializer,
622 )
623 }
624 }
625 &SerializeWith(&self.r#same_as)
626 })?;
627 } else {
628 serialize_struct.skip_field("sameAs")?;
629 }
630 if !Vec::is_empty(&self.r#subject_of) {
631 serialize_struct.serialize_field("subjectOf", {
632 struct SerializeWith<'a>(&'a Vec<SubjectOfProperty>);
633 impl<'a> Serialize for SerializeWith<'a> {
634 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
635 where
636 S: Serializer,
637 {
638 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
639 self.0, serializer,
640 )
641 }
642 }
643 &SerializeWith(&self.r#subject_of)
644 })?;
645 } else {
646 serialize_struct.skip_field("subjectOf")?;
647 }
648 if !Vec::is_empty(&self.r#url) {
649 serialize_struct.serialize_field("url", {
650 struct SerializeWith<'a>(&'a Vec<UrlProperty>);
651 impl<'a> Serialize for SerializeWith<'a> {
652 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
653 where
654 S: Serializer,
655 {
656 serde_with::As::<serde_with::OneOrMany<serde_with::Same>>::serialize(
657 self.0, serializer,
658 )
659 }
660 }
661 &SerializeWith(&self.r#url)
662 })?;
663 } else {
664 serialize_struct.skip_field("url")?;
665 }
666 serialize_struct.end()
667 }
668 }
669 impl<'de> Deserialize<'de> for CompoundPriceSpecification {
670 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
671 where
672 D: Deserializer<'de>,
673 {
674 enum Field {
675 PriceComponent,
676 PriceType,
677 EligibleQuantity,
678 EligibleTransactionVolume,
679 MaxPrice,
680 MinPrice,
681 Price,
682 PriceCurrency,
683 ValidFrom,
684 ValidThrough,
685 ValueAddedTaxIncluded,
686 AdditionalType,
687 AlternateName,
688 Description,
689 DisambiguatingDescription,
690 Identifier,
691 Image,
692 MainEntityOfPage,
693 Name,
694 PotentialAction,
695 SameAs,
696 SubjectOf,
697 Url,
698 Ignore,
699 }
700 struct FieldVisitor;
701 impl<'de> Visitor<'de> for FieldVisitor {
702 type Value = Field;
703 fn expecting(&self, formatter: &mut Formatter) -> fmt::Result {
704 formatter.write_str("field identifier")
705 }
706 fn visit_str<E>(self, value: &str) -> Result<Self::Value, E>
707 where
708 E: de::Error,
709 {
710 match value {
711 "priceComponent" => Ok(Field::PriceComponent),
712 "priceType" => Ok(Field::PriceType),
713 "eligibleQuantity" => Ok(Field::EligibleQuantity),
714 "eligibleTransactionVolume" => Ok(Field::EligibleTransactionVolume),
715 "maxPrice" => Ok(Field::MaxPrice),
716 "minPrice" => Ok(Field::MinPrice),
717 "price" => Ok(Field::Price),
718 "priceCurrency" => Ok(Field::PriceCurrency),
719 "validFrom" => Ok(Field::ValidFrom),
720 "validThrough" => Ok(Field::ValidThrough),
721 "valueAddedTaxIncluded" => Ok(Field::ValueAddedTaxIncluded),
722 "additionalType" => Ok(Field::AdditionalType),
723 "alternateName" => Ok(Field::AlternateName),
724 "description" => Ok(Field::Description),
725 "disambiguatingDescription" => Ok(Field::DisambiguatingDescription),
726 "identifier" => Ok(Field::Identifier),
727 "image" => Ok(Field::Image),
728 "mainEntityOfPage" => Ok(Field::MainEntityOfPage),
729 "name" => Ok(Field::Name),
730 "potentialAction" => Ok(Field::PotentialAction),
731 "sameAs" => Ok(Field::SameAs),
732 "subjectOf" => Ok(Field::SubjectOf),
733 "url" => Ok(Field::Url),
734 "id" | "type" => Ok(Field::Ignore),
735 _ => Err(de::Error::unknown_field(value, FIELDS)),
736 }
737 }
738 fn visit_bytes<E>(self, value: &[u8]) -> Result<Self::Value, E>
739 where
740 E: de::Error,
741 {
742 match value {
743 b"priceComponent" => Ok(Field::PriceComponent),
744 b"priceType" => Ok(Field::PriceType),
745 b"eligibleQuantity" => Ok(Field::EligibleQuantity),
746 b"eligibleTransactionVolume" => Ok(Field::EligibleTransactionVolume),
747 b"maxPrice" => Ok(Field::MaxPrice),
748 b"minPrice" => Ok(Field::MinPrice),
749 b"price" => Ok(Field::Price),
750 b"priceCurrency" => Ok(Field::PriceCurrency),
751 b"validFrom" => Ok(Field::ValidFrom),
752 b"validThrough" => Ok(Field::ValidThrough),
753 b"valueAddedTaxIncluded" => Ok(Field::ValueAddedTaxIncluded),
754 b"additionalType" => Ok(Field::AdditionalType),
755 b"alternateName" => Ok(Field::AlternateName),
756 b"description" => Ok(Field::Description),
757 b"disambiguatingDescription" => Ok(Field::DisambiguatingDescription),
758 b"identifier" => Ok(Field::Identifier),
759 b"image" => Ok(Field::Image),
760 b"mainEntityOfPage" => Ok(Field::MainEntityOfPage),
761 b"name" => Ok(Field::Name),
762 b"potentialAction" => Ok(Field::PotentialAction),
763 b"sameAs" => Ok(Field::SameAs),
764 b"subjectOf" => Ok(Field::SubjectOf),
765 b"url" => Ok(Field::Url),
766 b"id" | b"type" => Ok(Field::Ignore),
767 _ => {
768 let value = &String::from_utf8_lossy(value);
769 Err(de::Error::unknown_field(value, FIELDS))
770 }
771 }
772 }
773 }
774 impl<'de> Deserialize<'de> for Field {
775 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
776 where
777 D: Deserializer<'de>,
778 {
779 deserializer.deserialize_identifier(FieldVisitor)
780 }
781 }
782 struct ClassVisitor;
783 impl<'de> Visitor<'de> for ClassVisitor {
784 type Value = CompoundPriceSpecification;
785 fn expecting(&self, formatter: &mut Formatter) -> fmt::Result {
786 formatter.write_str("schema.org schema CompoundPriceSpecification")
787 }
788 fn visit_map<A>(self, mut map: A) -> Result<Self::Value, A::Error>
789 where
790 A: de::MapAccess<'de>,
791 {
792 let mut r#price_component_property = None;
793 let mut r#price_type_property = None;
794 let mut r#eligible_quantity_property = None;
795 let mut r#eligible_transaction_volume_property = None;
796 let mut r#max_price_property = None;
797 let mut r#min_price_property = None;
798 let mut r#price_property = None;
799 let mut r#price_currency_property = None;
800 let mut r#valid_from_property = None;
801 let mut r#valid_through_property = None;
802 let mut r#value_added_tax_included_property = None;
803 let mut r#additional_type_property = None;
804 let mut r#alternate_name_property = None;
805 let mut r#description_property = None;
806 let mut r#disambiguating_description_property = None;
807 let mut r#identifier_property = None;
808 let mut r#image_property = None;
809 let mut r#main_entity_of_page_property = None;
810 let mut r#name_property = None;
811 let mut r#potential_action_property = None;
812 let mut r#same_as_property = None;
813 let mut r#subject_of_property = None;
814 let mut r#url_property = None;
815 while let Some(key) = map.next_key::<Field>()? {
816 match key {
817 Field::PriceComponent => {
818 if r#price_component_property.is_some() {
819 return Err(<A::Error as de::Error>::duplicate_field(
820 "priceComponent",
821 ));
822 }
823 r#price_component_property = Some({
824 struct DeserializeWith(Vec<PriceComponentProperty>);
825 impl<'de> Deserialize<'de> for DeserializeWith {
826 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
827 where
828 D: Deserializer<'de>,
829 {
830 Ok(DeserializeWith(serde_with::As::<
831 serde_with::OneOrMany<serde_with::Same>,
832 >::deserialize(deserializer)?))
833 }
834 }
835 match map.next_value::<DeserializeWith>() {
836 Ok(deserialize_with) => deserialize_with.0,
837 Err(err) => {
838 return Err(err);
839 }
840 }
841 });
842 }
843 Field::PriceType => {
844 if r#price_type_property.is_some() {
845 return Err(<A::Error as de::Error>::duplicate_field(
846 "priceType",
847 ));
848 }
849 r#price_type_property = Some({
850 struct DeserializeWith(Vec<PriceTypeProperty>);
851 impl<'de> Deserialize<'de> for DeserializeWith {
852 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
853 where
854 D: Deserializer<'de>,
855 {
856 Ok(DeserializeWith(serde_with::As::<
857 serde_with::OneOrMany<serde_with::Same>,
858 >::deserialize(deserializer)?))
859 }
860 }
861 match map.next_value::<DeserializeWith>() {
862 Ok(deserialize_with) => deserialize_with.0,
863 Err(err) => {
864 return Err(err);
865 }
866 }
867 });
868 }
869 Field::EligibleQuantity => {
870 if r#eligible_quantity_property.is_some() {
871 return Err(<A::Error as de::Error>::duplicate_field(
872 "eligibleQuantity",
873 ));
874 }
875 r#eligible_quantity_property = Some({
876 struct DeserializeWith(Vec<EligibleQuantityProperty>);
877 impl<'de> Deserialize<'de> for DeserializeWith {
878 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
879 where
880 D: Deserializer<'de>,
881 {
882 Ok(DeserializeWith(serde_with::As::<
883 serde_with::OneOrMany<serde_with::Same>,
884 >::deserialize(deserializer)?))
885 }
886 }
887 match map.next_value::<DeserializeWith>() {
888 Ok(deserialize_with) => deserialize_with.0,
889 Err(err) => {
890 return Err(err);
891 }
892 }
893 });
894 }
895 Field::EligibleTransactionVolume => {
896 if r#eligible_transaction_volume_property.is_some() {
897 return Err(<A::Error as de::Error>::duplicate_field(
898 "eligibleTransactionVolume",
899 ));
900 }
901 r#eligible_transaction_volume_property = Some({
902 struct DeserializeWith(Vec<EligibleTransactionVolumeProperty>);
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::MaxPrice => {
922 if r#max_price_property.is_some() {
923 return Err(<A::Error as de::Error>::duplicate_field(
924 "maxPrice",
925 ));
926 }
927 r#max_price_property = Some({
928 struct DeserializeWith(Vec<MaxPriceProperty>);
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::MinPrice => {
948 if r#min_price_property.is_some() {
949 return Err(<A::Error as de::Error>::duplicate_field(
950 "minPrice",
951 ));
952 }
953 r#min_price_property = Some({
954 struct DeserializeWith(Vec<MinPriceProperty>);
955 impl<'de> Deserialize<'de> for DeserializeWith {
956 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
957 where
958 D: Deserializer<'de>,
959 {
960 Ok(DeserializeWith(serde_with::As::<
961 serde_with::OneOrMany<serde_with::Same>,
962 >::deserialize(deserializer)?))
963 }
964 }
965 match map.next_value::<DeserializeWith>() {
966 Ok(deserialize_with) => deserialize_with.0,
967 Err(err) => {
968 return Err(err);
969 }
970 }
971 });
972 }
973 Field::Price => {
974 if r#price_property.is_some() {
975 return Err(<A::Error as de::Error>::duplicate_field("price"));
976 }
977 r#price_property = Some({
978 struct DeserializeWith(Vec<PriceProperty>);
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::PriceCurrency => {
998 if r#price_currency_property.is_some() {
999 return Err(<A::Error as de::Error>::duplicate_field(
1000 "priceCurrency",
1001 ));
1002 }
1003 r#price_currency_property = Some({
1004 struct DeserializeWith(Vec<PriceCurrencyProperty>);
1005 impl<'de> Deserialize<'de> for DeserializeWith {
1006 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1007 where
1008 D: Deserializer<'de>,
1009 {
1010 Ok(DeserializeWith(serde_with::As::<
1011 serde_with::OneOrMany<serde_with::Same>,
1012 >::deserialize(deserializer)?))
1013 }
1014 }
1015 match map.next_value::<DeserializeWith>() {
1016 Ok(deserialize_with) => deserialize_with.0,
1017 Err(err) => {
1018 return Err(err);
1019 }
1020 }
1021 });
1022 }
1023 Field::ValidFrom => {
1024 if r#valid_from_property.is_some() {
1025 return Err(<A::Error as de::Error>::duplicate_field(
1026 "validFrom",
1027 ));
1028 }
1029 r#valid_from_property = Some({
1030 struct DeserializeWith(Vec<ValidFromProperty>);
1031 impl<'de> Deserialize<'de> for DeserializeWith {
1032 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1033 where
1034 D: Deserializer<'de>,
1035 {
1036 Ok(DeserializeWith(serde_with::As::<
1037 serde_with::OneOrMany<serde_with::Same>,
1038 >::deserialize(deserializer)?))
1039 }
1040 }
1041 match map.next_value::<DeserializeWith>() {
1042 Ok(deserialize_with) => deserialize_with.0,
1043 Err(err) => {
1044 return Err(err);
1045 }
1046 }
1047 });
1048 }
1049 Field::ValidThrough => {
1050 if r#valid_through_property.is_some() {
1051 return Err(<A::Error as de::Error>::duplicate_field(
1052 "validThrough",
1053 ));
1054 }
1055 r#valid_through_property = Some({
1056 struct DeserializeWith(Vec<ValidThroughProperty>);
1057 impl<'de> Deserialize<'de> for DeserializeWith {
1058 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1059 where
1060 D: Deserializer<'de>,
1061 {
1062 Ok(DeserializeWith(serde_with::As::<
1063 serde_with::OneOrMany<serde_with::Same>,
1064 >::deserialize(deserializer)?))
1065 }
1066 }
1067 match map.next_value::<DeserializeWith>() {
1068 Ok(deserialize_with) => deserialize_with.0,
1069 Err(err) => {
1070 return Err(err);
1071 }
1072 }
1073 });
1074 }
1075 Field::ValueAddedTaxIncluded => {
1076 if r#value_added_tax_included_property.is_some() {
1077 return Err(<A::Error as de::Error>::duplicate_field(
1078 "valueAddedTaxIncluded",
1079 ));
1080 }
1081 r#value_added_tax_included_property = Some({
1082 struct DeserializeWith(Vec<ValueAddedTaxIncludedProperty>);
1083 impl<'de> Deserialize<'de> for DeserializeWith {
1084 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1085 where
1086 D: Deserializer<'de>,
1087 {
1088 Ok(DeserializeWith(serde_with::As::<
1089 serde_with::OneOrMany<serde_with::Same>,
1090 >::deserialize(deserializer)?))
1091 }
1092 }
1093 match map.next_value::<DeserializeWith>() {
1094 Ok(deserialize_with) => deserialize_with.0,
1095 Err(err) => {
1096 return Err(err);
1097 }
1098 }
1099 });
1100 }
1101 Field::AdditionalType => {
1102 if r#additional_type_property.is_some() {
1103 return Err(<A::Error as de::Error>::duplicate_field(
1104 "additionalType",
1105 ));
1106 }
1107 r#additional_type_property = Some({
1108 struct DeserializeWith(Vec<AdditionalTypeProperty>);
1109 impl<'de> Deserialize<'de> for DeserializeWith {
1110 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1111 where
1112 D: Deserializer<'de>,
1113 {
1114 Ok(DeserializeWith(serde_with::As::<
1115 serde_with::OneOrMany<serde_with::Same>,
1116 >::deserialize(deserializer)?))
1117 }
1118 }
1119 match map.next_value::<DeserializeWith>() {
1120 Ok(deserialize_with) => deserialize_with.0,
1121 Err(err) => {
1122 return Err(err);
1123 }
1124 }
1125 });
1126 }
1127 Field::AlternateName => {
1128 if r#alternate_name_property.is_some() {
1129 return Err(<A::Error as de::Error>::duplicate_field(
1130 "alternateName",
1131 ));
1132 }
1133 r#alternate_name_property = Some({
1134 struct DeserializeWith(Vec<AlternateNameProperty>);
1135 impl<'de> Deserialize<'de> for DeserializeWith {
1136 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1137 where
1138 D: Deserializer<'de>,
1139 {
1140 Ok(DeserializeWith(serde_with::As::<
1141 serde_with::OneOrMany<serde_with::Same>,
1142 >::deserialize(deserializer)?))
1143 }
1144 }
1145 match map.next_value::<DeserializeWith>() {
1146 Ok(deserialize_with) => deserialize_with.0,
1147 Err(err) => {
1148 return Err(err);
1149 }
1150 }
1151 });
1152 }
1153 Field::Description => {
1154 if r#description_property.is_some() {
1155 return Err(<A::Error as de::Error>::duplicate_field(
1156 "description",
1157 ));
1158 }
1159 r#description_property = Some({
1160 struct DeserializeWith(Vec<DescriptionProperty>);
1161 impl<'de> Deserialize<'de> for DeserializeWith {
1162 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1163 where
1164 D: Deserializer<'de>,
1165 {
1166 Ok(DeserializeWith(serde_with::As::<
1167 serde_with::OneOrMany<serde_with::Same>,
1168 >::deserialize(deserializer)?))
1169 }
1170 }
1171 match map.next_value::<DeserializeWith>() {
1172 Ok(deserialize_with) => deserialize_with.0,
1173 Err(err) => {
1174 return Err(err);
1175 }
1176 }
1177 });
1178 }
1179 Field::DisambiguatingDescription => {
1180 if r#disambiguating_description_property.is_some() {
1181 return Err(<A::Error as de::Error>::duplicate_field(
1182 "disambiguatingDescription",
1183 ));
1184 }
1185 r#disambiguating_description_property = Some({
1186 struct DeserializeWith(Vec<DisambiguatingDescriptionProperty>);
1187 impl<'de> Deserialize<'de> for DeserializeWith {
1188 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1189 where
1190 D: Deserializer<'de>,
1191 {
1192 Ok(DeserializeWith(serde_with::As::<
1193 serde_with::OneOrMany<serde_with::Same>,
1194 >::deserialize(deserializer)?))
1195 }
1196 }
1197 match map.next_value::<DeserializeWith>() {
1198 Ok(deserialize_with) => deserialize_with.0,
1199 Err(err) => {
1200 return Err(err);
1201 }
1202 }
1203 });
1204 }
1205 Field::Identifier => {
1206 if r#identifier_property.is_some() {
1207 return Err(<A::Error as de::Error>::duplicate_field(
1208 "identifier",
1209 ));
1210 }
1211 r#identifier_property = Some({
1212 struct DeserializeWith(Vec<IdentifierProperty>);
1213 impl<'de> Deserialize<'de> for DeserializeWith {
1214 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1215 where
1216 D: Deserializer<'de>,
1217 {
1218 Ok(DeserializeWith(serde_with::As::<
1219 serde_with::OneOrMany<serde_with::Same>,
1220 >::deserialize(deserializer)?))
1221 }
1222 }
1223 match map.next_value::<DeserializeWith>() {
1224 Ok(deserialize_with) => deserialize_with.0,
1225 Err(err) => {
1226 return Err(err);
1227 }
1228 }
1229 });
1230 }
1231 Field::Image => {
1232 if r#image_property.is_some() {
1233 return Err(<A::Error as de::Error>::duplicate_field("image"));
1234 }
1235 r#image_property = Some({
1236 struct DeserializeWith(Vec<ImageProperty>);
1237 impl<'de> Deserialize<'de> for DeserializeWith {
1238 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1239 where
1240 D: Deserializer<'de>,
1241 {
1242 Ok(DeserializeWith(serde_with::As::<
1243 serde_with::OneOrMany<serde_with::Same>,
1244 >::deserialize(deserializer)?))
1245 }
1246 }
1247 match map.next_value::<DeserializeWith>() {
1248 Ok(deserialize_with) => deserialize_with.0,
1249 Err(err) => {
1250 return Err(err);
1251 }
1252 }
1253 });
1254 }
1255 Field::MainEntityOfPage => {
1256 if r#main_entity_of_page_property.is_some() {
1257 return Err(<A::Error as de::Error>::duplicate_field(
1258 "mainEntityOfPage",
1259 ));
1260 }
1261 r#main_entity_of_page_property = Some({
1262 struct DeserializeWith(Vec<MainEntityOfPageProperty>);
1263 impl<'de> Deserialize<'de> for DeserializeWith {
1264 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1265 where
1266 D: Deserializer<'de>,
1267 {
1268 Ok(DeserializeWith(serde_with::As::<
1269 serde_with::OneOrMany<serde_with::Same>,
1270 >::deserialize(deserializer)?))
1271 }
1272 }
1273 match map.next_value::<DeserializeWith>() {
1274 Ok(deserialize_with) => deserialize_with.0,
1275 Err(err) => {
1276 return Err(err);
1277 }
1278 }
1279 });
1280 }
1281 Field::Name => {
1282 if r#name_property.is_some() {
1283 return Err(<A::Error as de::Error>::duplicate_field("name"));
1284 }
1285 r#name_property = Some({
1286 struct DeserializeWith(Vec<NameProperty>);
1287 impl<'de> Deserialize<'de> for DeserializeWith {
1288 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1289 where
1290 D: Deserializer<'de>,
1291 {
1292 Ok(DeserializeWith(serde_with::As::<
1293 serde_with::OneOrMany<serde_with::Same>,
1294 >::deserialize(deserializer)?))
1295 }
1296 }
1297 match map.next_value::<DeserializeWith>() {
1298 Ok(deserialize_with) => deserialize_with.0,
1299 Err(err) => {
1300 return Err(err);
1301 }
1302 }
1303 });
1304 }
1305 Field::PotentialAction => {
1306 if r#potential_action_property.is_some() {
1307 return Err(<A::Error as de::Error>::duplicate_field(
1308 "potentialAction",
1309 ));
1310 }
1311 r#potential_action_property = Some({
1312 struct DeserializeWith(Vec<PotentialActionProperty>);
1313 impl<'de> Deserialize<'de> for DeserializeWith {
1314 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1315 where
1316 D: Deserializer<'de>,
1317 {
1318 Ok(DeserializeWith(serde_with::As::<
1319 serde_with::OneOrMany<serde_with::Same>,
1320 >::deserialize(deserializer)?))
1321 }
1322 }
1323 match map.next_value::<DeserializeWith>() {
1324 Ok(deserialize_with) => deserialize_with.0,
1325 Err(err) => {
1326 return Err(err);
1327 }
1328 }
1329 });
1330 }
1331 Field::SameAs => {
1332 if r#same_as_property.is_some() {
1333 return Err(<A::Error as de::Error>::duplicate_field("sameAs"));
1334 }
1335 r#same_as_property = Some({
1336 struct DeserializeWith(Vec<SameAsProperty>);
1337 impl<'de> Deserialize<'de> for DeserializeWith {
1338 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1339 where
1340 D: Deserializer<'de>,
1341 {
1342 Ok(DeserializeWith(serde_with::As::<
1343 serde_with::OneOrMany<serde_with::Same>,
1344 >::deserialize(deserializer)?))
1345 }
1346 }
1347 match map.next_value::<DeserializeWith>() {
1348 Ok(deserialize_with) => deserialize_with.0,
1349 Err(err) => {
1350 return Err(err);
1351 }
1352 }
1353 });
1354 }
1355 Field::SubjectOf => {
1356 if r#subject_of_property.is_some() {
1357 return Err(<A::Error as de::Error>::duplicate_field(
1358 "subjectOf",
1359 ));
1360 }
1361 r#subject_of_property = Some({
1362 struct DeserializeWith(Vec<SubjectOfProperty>);
1363 impl<'de> Deserialize<'de> for DeserializeWith {
1364 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1365 where
1366 D: Deserializer<'de>,
1367 {
1368 Ok(DeserializeWith(serde_with::As::<
1369 serde_with::OneOrMany<serde_with::Same>,
1370 >::deserialize(deserializer)?))
1371 }
1372 }
1373 match map.next_value::<DeserializeWith>() {
1374 Ok(deserialize_with) => deserialize_with.0,
1375 Err(err) => {
1376 return Err(err);
1377 }
1378 }
1379 });
1380 }
1381 Field::Url => {
1382 if r#url_property.is_some() {
1383 return Err(<A::Error as de::Error>::duplicate_field("url"));
1384 }
1385 r#url_property = Some({
1386 struct DeserializeWith(Vec<UrlProperty>);
1387 impl<'de> Deserialize<'de> for DeserializeWith {
1388 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1389 where
1390 D: Deserializer<'de>,
1391 {
1392 Ok(DeserializeWith(serde_with::As::<
1393 serde_with::OneOrMany<serde_with::Same>,
1394 >::deserialize(deserializer)?))
1395 }
1396 }
1397 match map.next_value::<DeserializeWith>() {
1398 Ok(deserialize_with) => deserialize_with.0,
1399 Err(err) => {
1400 return Err(err);
1401 }
1402 }
1403 });
1404 }
1405 Field::Ignore => {
1406 let _ = map.next_value::<de::IgnoredAny>()?;
1407 }
1408 }
1409 }
1410 Ok(CompoundPriceSpecification {
1411 r#price_component: r#price_component_property.unwrap_or_default(),
1412 r#price_type: r#price_type_property.unwrap_or_default(),
1413 r#eligible_quantity: r#eligible_quantity_property.unwrap_or_default(),
1414 r#eligible_transaction_volume: r#eligible_transaction_volume_property
1415 .unwrap_or_default(),
1416 r#max_price: r#max_price_property.unwrap_or_default(),
1417 r#min_price: r#min_price_property.unwrap_or_default(),
1418 r#price: r#price_property.unwrap_or_default(),
1419 r#price_currency: r#price_currency_property.unwrap_or_default(),
1420 r#valid_from: r#valid_from_property.unwrap_or_default(),
1421 r#valid_through: r#valid_through_property.unwrap_or_default(),
1422 r#value_added_tax_included: r#value_added_tax_included_property
1423 .unwrap_or_default(),
1424 r#additional_type: r#additional_type_property.unwrap_or_default(),
1425 r#alternate_name: r#alternate_name_property.unwrap_or_default(),
1426 r#description: r#description_property.unwrap_or_default(),
1427 r#disambiguating_description: r#disambiguating_description_property
1428 .unwrap_or_default(),
1429 r#identifier: r#identifier_property.unwrap_or_default(),
1430 r#image: r#image_property.unwrap_or_default(),
1431 r#main_entity_of_page: r#main_entity_of_page_property.unwrap_or_default(),
1432 r#name: r#name_property.unwrap_or_default(),
1433 r#potential_action: r#potential_action_property.unwrap_or_default(),
1434 r#same_as: r#same_as_property.unwrap_or_default(),
1435 r#subject_of: r#subject_of_property.unwrap_or_default(),
1436 r#url: r#url_property.unwrap_or_default(),
1437 })
1438 }
1439 }
1440 const FIELDS: &[&str] = &[
1441 "priceComponent",
1442 "priceType",
1443 "eligibleQuantity",
1444 "eligibleTransactionVolume",
1445 "maxPrice",
1446 "minPrice",
1447 "price",
1448 "priceCurrency",
1449 "validFrom",
1450 "validThrough",
1451 "valueAddedTaxIncluded",
1452 "additionalType",
1453 "alternateName",
1454 "description",
1455 "disambiguatingDescription",
1456 "identifier",
1457 "image",
1458 "mainEntityOfPage",
1459 "name",
1460 "potentialAction",
1461 "sameAs",
1462 "subjectOf",
1463 "url",
1464 ];
1465 deserializer.deserialize_struct("CompoundPriceSpecification", FIELDS, ClassVisitor)
1466 }
1467 }
1468}