Skip to main content

fhir_types/r5/
parameters.rs

1// @generated by fhir-codegen from hl7.fhir.r5.core 5.0.0. DO NOT EDIT.
2// Change the emitter (tools/fhir-codegen) and regenerate.
3// SPDX-FileCopyrightText: Cadasto B.V.
4// SPDX-License-Identifier: Apache-2.0
5//! Operation Request or Response
6
7/// Operation Request or Response
8///
9/// This resource is used to pass information into and back from an operation
10/// (whether invoked directly from REST or within a messaging environment). It
11/// is not persisted or allowed to be referenced by other resources.
12#[derive(Debug, Clone, Default, PartialEq, Eq)]
13pub struct Parameters {
14    /// Logical id of this artifact
15    ///
16    /// The logical id of the resource, as used in the URL for the resource. Once
17    /// assigned, this value never changes.
18    pub id: Option<std::string::String>,
19    /// Metadata about the resource
20    ///
21    /// The metadata about the resource. This is content that is maintained by the
22    /// infrastructure. Changes to the content might not always be associated with
23    /// version changes to the resource.
24    pub meta: Option<super::meta::Meta>,
25    /// A set of rules under which this content was created
26    ///
27    /// A reference to a set of rules that were followed when the resource was
28    /// constructed, and which must be understood when processing the content.
29    /// Often, this is a reference to an implementation guide that defines the
30    /// special rules along with other profiles etc.
31    pub implicit_rules: Option<super::primitives::Uri>,
32    /// Language of the resource content
33    ///
34    /// The base language in which the resource is written.
35    pub language: Option<super::primitives::Code>,
36    /// Operation Parameter
37    ///
38    /// A parameter passed to or received from the operation.
39    pub parameter: Vec<ParametersParameter>,
40}
41
42impl super::super::codec::Json for Parameters {
43    fn to_json(&self) -> Result<super::super::codec::Object, super::super::codec::EncodeError> {
44        let mut object = super::super::codec::Object::new();
45        object.insert(
46            std::string::String::from("resourceType"),
47            super::super::codec::Value::String(std::string::String::from("Parameters")),
48        );
49        if let Some(v) = &self.id {
50            object.insert(
51                std::string::String::from("id"),
52                super::super::codec::Value::String(v.clone()),
53            );
54        }
55        if let Some(item) = &self.meta {
56            object.insert(
57                std::string::String::from("meta"),
58                super::super::codec::Value::Object(super::super::codec::Json::to_json(item)?),
59            );
60        }
61        if let Some(item) = &self.implicit_rules {
62            if let Some(v) = super::super::codec::Primitive::value_json(item)? {
63                object.insert(std::string::String::from("implicitRules"), v);
64            }
65            if let Some(e) = super::super::codec::Primitive::element_json(item)? {
66                object.insert(std::string::String::from("_implicitRules"), e);
67            }
68        }
69        if let Some(item) = &self.language {
70            if let Some(v) = super::super::codec::Primitive::value_json(item)? {
71                object.insert(std::string::String::from("language"), v);
72            }
73            if let Some(e) = super::super::codec::Primitive::element_json(item)? {
74                object.insert(std::string::String::from("_language"), e);
75            }
76        }
77        if !self.parameter.is_empty() {
78            let mut items = Vec::with_capacity(self.parameter.len());
79            for item in &self.parameter {
80                items.push(super::super::codec::Value::Object(
81                    super::super::codec::Json::to_json(item)?,
82                ));
83            }
84            object.insert(
85                std::string::String::from("parameter"),
86                super::super::codec::Value::Array(items),
87            );
88        }
89        Ok(object)
90    }
91
92    fn from_json(
93        object: &super::super::codec::Object,
94        path: &mut super::super::codec::Path,
95    ) -> Result<Self, super::super::codec::DecodeError> {
96        let mut raw_id: Option<&super::super::codec::Value> = None;
97        let mut raw_meta: Option<&super::super::codec::Value> = None;
98        let mut raw_implicit_rules: Option<&super::super::codec::Value> = None;
99        let mut raw_implicit_rules_element: Option<&super::super::codec::Value> = None;
100        let mut raw_language: Option<&super::super::codec::Value> = None;
101        let mut raw_language_element: Option<&super::super::codec::Value> = None;
102        let mut raw_parameter: Option<&super::super::codec::Value> = None;
103        for (key, value) in object {
104            match key.as_str() {
105                "resourceType" => {
106                    if value.as_str() != Some("Parameters") {
107                        return Err(path.error(super::super::codec::DecodeErrorKind::ResourceType));
108                    }
109                }
110                "id" => {
111                    raw_id = Some(value);
112                }
113                "meta" => {
114                    raw_meta = Some(value);
115                }
116                "implicitRules" => {
117                    raw_implicit_rules = Some(value);
118                }
119                "_implicitRules" => {
120                    raw_implicit_rules_element = Some(value);
121                }
122                "language" => {
123                    raw_language = Some(value);
124                }
125                "_language" => {
126                    raw_language_element = Some(value);
127                }
128                "parameter" => {
129                    raw_parameter = Some(value);
130                }
131                other => {
132                    return path.with(other, |path| {
133                        Err(path.error(super::super::codec::DecodeErrorKind::UnknownProperty))
134                    });
135                }
136            }
137        }
138        let field_id = raw_id
139            .map(|value| {
140                path.with("id", |path| {
141                    let value = super::super::codec::expect_single(value, path)?;
142                    super::primitives::checked_id(
143                        super::super::codec::expect_string(value, path)?,
144                        path,
145                    )
146                })
147            })
148            .transpose()?;
149        let field_meta = raw_meta
150            .map(|value| {
151                path.with("meta", |path| {
152                    super::super::codec::Json::from_json(
153                        super::super::codec::expect_object(
154                            super::super::codec::expect_single(value, path)?,
155                            path,
156                        )?,
157                        path,
158                    )
159                })
160            })
161            .transpose()?;
162        let field_implicit_rules = match (raw_implicit_rules, raw_implicit_rules_element) {
163            (None, None) => None,
164            (value, element) => Some(path.with("implicitRules", |path| {
165                super::super::codec::Primitive::from_json_parts(value, element, path)
166            })?),
167        };
168        let field_language = match (raw_language, raw_language_element) {
169            (None, None) => None,
170            (value, element) => Some(path.with("language", |path| {
171                super::super::codec::Primitive::from_json_parts(value, element, path)
172            })?),
173        };
174        let mut field_parameter = Vec::new();
175        if let Some(raw) = raw_parameter {
176            for (index, value) in path
177                .with("parameter", |path| {
178                    super::super::codec::expect_array(raw, path)
179                })?
180                .iter()
181                .enumerate()
182            {
183                field_parameter.push(path.with_index("parameter", index, |path| {
184                    super::super::codec::Json::from_json(
185                        super::super::codec::expect_object(value, path)?,
186                        path,
187                    )
188                })?);
189            }
190        }
191        Ok(Self {
192            id: field_id,
193            meta: field_meta,
194            implicit_rules: field_implicit_rules,
195            language: field_language,
196            parameter: field_parameter,
197        })
198    }
199}
200
201impl serde::Serialize for Parameters {
202    fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
203        let mut map = serde::Serializer::serialize_map(serializer, None)?;
204        if let Some(item) = &self.implicit_rules {
205            super::super::codec::element_entry(&mut map, "_implicitRules", item)?;
206        }
207        if let Some(item) = &self.language {
208            super::super::codec::element_entry(&mut map, "_language", item)?;
209        }
210        if let Some(v) = &self.id {
211            serde::ser::SerializeMap::serialize_entry(&mut map, "id", v)?;
212        }
213        if let Some(item) = &self.implicit_rules {
214            super::super::codec::value_entry(&mut map, "implicitRules", item)?;
215        }
216        if let Some(item) = &self.language {
217            super::super::codec::value_entry(&mut map, "language", item)?;
218        }
219        if let Some(item) = &self.meta {
220            serde::ser::SerializeMap::serialize_entry(&mut map, "meta", item)?;
221        }
222        if !self.parameter.is_empty() {
223            serde::ser::SerializeMap::serialize_entry(&mut map, "parameter", &self.parameter)?;
224        }
225        serde::ser::SerializeMap::serialize_entry(&mut map, "resourceType", "Parameters")?;
226        serde::ser::SerializeMap::end(map)
227    }
228}
229
230impl<'de> serde::Deserialize<'de> for Parameters {
231    fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
232        let value = <super::super::codec::Value as serde::Deserialize>::deserialize(deserializer)?;
233        let mut path = super::super::codec::Path::root("Parameters");
234        let object =
235            super::super::codec::expect_object(&value, &path).map_err(serde::de::Error::custom)?;
236        super::super::codec::Json::from_json(object, &mut path).map_err(serde::de::Error::custom)
237    }
238}
239
240/// Operation Parameter
241///
242/// A parameter passed to or received from the operation.
243#[derive(Debug, Clone, Default, PartialEq, Eq)]
244pub struct ParametersParameter {
245    /// Unique id for inter-element referencing
246    ///
247    /// Unique id for the element within a resource (for internal references). This
248    /// may be any string value that does not contain spaces.
249    pub id: Option<std::string::String>,
250    /// Additional content defined by implementations
251    ///
252    /// May be used to represent additional information that is not part of the
253    /// basic definition of the element. To make the use of extensions safe and
254    /// managable, there is a strict set of governance applied to the definition and
255    /// use of extensions. Though any implementer can define an extension, there is
256    /// a set of requirements that SHALL be met as part of the definition of the
257    /// extension.
258    pub extension: Vec<super::extension::Extension>,
259    /// Extensions that cannot be ignored even if unrecognized
260    ///
261    /// May be used to represent additional information that is not part of the
262    /// basic definition of the element and that modifies the understanding of the
263    /// element in which it is contained and/or the understanding of the containing
264    /// element's descendants. Usually modifier elements provide negation or
265    /// qualification. To make the use of extensions safe and managable, there is a
266    /// strict set of governance applied to the definition and use of extensions.
267    /// Though any implementer can define an extension, there is a set of
268    /// requirements that SHALL be met as part of the definition of the extension.
269    /// Applications processing a resource are required to check for modifier
270    /// extensions. Modifier extensions SHALL NOT change the meaning of any elements
271    /// on Resource or DomainResource (including cannot change the meaning of
272    /// modifierExtension itself).
273    pub modifier_extension: Vec<super::extension::Extension>,
274    /// Name from the definition
275    ///
276    /// The name of the parameter (reference to the operation definition).
277    pub name: super::primitives::String,
278    /// If parameter is a data type
279    ///
280    /// Conveys the content if the parameter is a data type.
281    pub value: Option<ParametersParameterValue>,
282    /// If parameter is a whole resource
283    ///
284    /// Conveys the content if the parameter is a whole resource.
285    pub resource: Option<super::resource::Resource>,
286    /// Named part of a multi-part parameter
287    ///
288    /// A named part of a multi-part parameter.
289    pub part: Vec<ParametersParameter>,
290}
291
292impl super::super::codec::Json for ParametersParameter {
293    fn to_json(&self) -> Result<super::super::codec::Object, super::super::codec::EncodeError> {
294        let mut object = super::super::codec::Object::new();
295        if let Some(v) = &self.id {
296            object.insert(
297                std::string::String::from("id"),
298                super::super::codec::Value::String(v.clone()),
299            );
300        }
301        if !self.extension.is_empty() {
302            let mut items = Vec::with_capacity(self.extension.len());
303            for item in &self.extension {
304                items.push(super::super::codec::Value::Object(
305                    super::super::codec::Json::to_json(item)?,
306                ));
307            }
308            object.insert(
309                std::string::String::from("extension"),
310                super::super::codec::Value::Array(items),
311            );
312        }
313        if !self.modifier_extension.is_empty() {
314            let mut items = Vec::with_capacity(self.modifier_extension.len());
315            for item in &self.modifier_extension {
316                items.push(super::super::codec::Value::Object(
317                    super::super::codec::Json::to_json(item)?,
318                ));
319            }
320            object.insert(
321                std::string::String::from("modifierExtension"),
322                super::super::codec::Value::Array(items),
323            );
324        }
325        if let Some(v) = super::super::codec::Primitive::value_json(&self.name)? {
326            object.insert(std::string::String::from("name"), v);
327        }
328        if let Some(e) = super::super::codec::Primitive::element_json(&self.name)? {
329            object.insert(std::string::String::from("_name"), e);
330        }
331        if let Some(item) = &self.value {
332            let (suffix, value, element) = item.to_json_parts()?;
333            if let Some(value) = value {
334                object.insert(format!("value{suffix}"), value);
335            }
336            if let Some(element) = element {
337                object.insert(format!("_value{suffix}"), element);
338            }
339        }
340        if let Some(item) = &self.resource {
341            object.insert(
342                std::string::String::from("resource"),
343                super::super::codec::Value::Object(super::super::codec::Json::to_json(item)?),
344            );
345        }
346        if !self.part.is_empty() {
347            let mut items = Vec::with_capacity(self.part.len());
348            for item in &self.part {
349                items.push(super::super::codec::Value::Object(
350                    super::super::codec::Json::to_json(item)?,
351                ));
352            }
353            object.insert(
354                std::string::String::from("part"),
355                super::super::codec::Value::Array(items),
356            );
357        }
358        Ok(object)
359    }
360
361    fn from_json(
362        object: &super::super::codec::Object,
363        path: &mut super::super::codec::Path,
364    ) -> Result<Self, super::super::codec::DecodeError> {
365        let mut raw_id: Option<&super::super::codec::Value> = None;
366        let mut raw_extension: Option<&super::super::codec::Value> = None;
367        let mut raw_modifier_extension: Option<&super::super::codec::Value> = None;
368        let mut raw_name: Option<&super::super::codec::Value> = None;
369        let mut raw_name_element: Option<&super::super::codec::Value> = None;
370        let mut raw_value = super::super::codec::ChoiceSlot::default();
371        let mut raw_resource: Option<&super::super::codec::Value> = None;
372        let mut raw_part: Option<&super::super::codec::Value> = None;
373        for (key, value) in object {
374            match key.as_str() {
375                "id" => {
376                    raw_id = Some(value);
377                }
378                "extension" => {
379                    raw_extension = Some(value);
380                }
381                "modifierExtension" => {
382                    raw_modifier_extension = Some(value);
383                }
384                "name" => {
385                    raw_name = Some(value);
386                }
387                "_name" => {
388                    raw_name_element = Some(value);
389                }
390                "valueBase64Binary" => {
391                    raw_value.value("Base64Binary", value, path)?;
392                }
393                "_valueBase64Binary" => {
394                    raw_value.element("Base64Binary", value, path)?;
395                }
396                "valueBoolean" => {
397                    raw_value.value("Boolean", value, path)?;
398                }
399                "_valueBoolean" => {
400                    raw_value.element("Boolean", value, path)?;
401                }
402                "valueCanonical" => {
403                    raw_value.value("Canonical", value, path)?;
404                }
405                "_valueCanonical" => {
406                    raw_value.element("Canonical", value, path)?;
407                }
408                "valueCode" => {
409                    raw_value.value("Code", value, path)?;
410                }
411                "_valueCode" => {
412                    raw_value.element("Code", value, path)?;
413                }
414                "valueDate" => {
415                    raw_value.value("Date", value, path)?;
416                }
417                "_valueDate" => {
418                    raw_value.element("Date", value, path)?;
419                }
420                "valueDateTime" => {
421                    raw_value.value("DateTime", value, path)?;
422                }
423                "_valueDateTime" => {
424                    raw_value.element("DateTime", value, path)?;
425                }
426                "valueDecimal" => {
427                    raw_value.value("Decimal", value, path)?;
428                }
429                "_valueDecimal" => {
430                    raw_value.element("Decimal", value, path)?;
431                }
432                "valueId" => {
433                    raw_value.value("Id", value, path)?;
434                }
435                "_valueId" => {
436                    raw_value.element("Id", value, path)?;
437                }
438                "valueInstant" => {
439                    raw_value.value("Instant", value, path)?;
440                }
441                "_valueInstant" => {
442                    raw_value.element("Instant", value, path)?;
443                }
444                "valueInteger" => {
445                    raw_value.value("Integer", value, path)?;
446                }
447                "_valueInteger" => {
448                    raw_value.element("Integer", value, path)?;
449                }
450                "valueInteger64" => {
451                    raw_value.value("Integer64", value, path)?;
452                }
453                "_valueInteger64" => {
454                    raw_value.element("Integer64", value, path)?;
455                }
456                "valueMarkdown" => {
457                    raw_value.value("Markdown", value, path)?;
458                }
459                "_valueMarkdown" => {
460                    raw_value.element("Markdown", value, path)?;
461                }
462                "valueOid" => {
463                    raw_value.value("Oid", value, path)?;
464                }
465                "_valueOid" => {
466                    raw_value.element("Oid", value, path)?;
467                }
468                "valuePositiveInt" => {
469                    raw_value.value("PositiveInt", value, path)?;
470                }
471                "_valuePositiveInt" => {
472                    raw_value.element("PositiveInt", value, path)?;
473                }
474                "valueString" => {
475                    raw_value.value("String", value, path)?;
476                }
477                "_valueString" => {
478                    raw_value.element("String", value, path)?;
479                }
480                "valueTime" => {
481                    raw_value.value("Time", value, path)?;
482                }
483                "_valueTime" => {
484                    raw_value.element("Time", value, path)?;
485                }
486                "valueUnsignedInt" => {
487                    raw_value.value("UnsignedInt", value, path)?;
488                }
489                "_valueUnsignedInt" => {
490                    raw_value.element("UnsignedInt", value, path)?;
491                }
492                "valueUri" => {
493                    raw_value.value("Uri", value, path)?;
494                }
495                "_valueUri" => {
496                    raw_value.element("Uri", value, path)?;
497                }
498                "valueUrl" => {
499                    raw_value.value("Url", value, path)?;
500                }
501                "_valueUrl" => {
502                    raw_value.element("Url", value, path)?;
503                }
504                "valueUuid" => {
505                    raw_value.value("Uuid", value, path)?;
506                }
507                "_valueUuid" => {
508                    raw_value.element("Uuid", value, path)?;
509                }
510                "valueAddress" => {
511                    raw_value.value("Address", value, path)?;
512                }
513                "_valueAddress" => {
514                    raw_value.element("Address", value, path)?;
515                }
516                "valueAge" => {
517                    raw_value.value("Age", value, path)?;
518                }
519                "_valueAge" => {
520                    raw_value.element("Age", value, path)?;
521                }
522                "valueAnnotation" => {
523                    raw_value.value("Annotation", value, path)?;
524                }
525                "_valueAnnotation" => {
526                    raw_value.element("Annotation", value, path)?;
527                }
528                "valueAttachment" => {
529                    raw_value.value("Attachment", value, path)?;
530                }
531                "_valueAttachment" => {
532                    raw_value.element("Attachment", value, path)?;
533                }
534                "valueCodeableConcept" => {
535                    raw_value.value("CodeableConcept", value, path)?;
536                }
537                "_valueCodeableConcept" => {
538                    raw_value.element("CodeableConcept", value, path)?;
539                }
540                "valueCodeableReference" => {
541                    raw_value.value("CodeableReference", value, path)?;
542                }
543                "_valueCodeableReference" => {
544                    raw_value.element("CodeableReference", value, path)?;
545                }
546                "valueCoding" => {
547                    raw_value.value("Coding", value, path)?;
548                }
549                "_valueCoding" => {
550                    raw_value.element("Coding", value, path)?;
551                }
552                "valueContactPoint" => {
553                    raw_value.value("ContactPoint", value, path)?;
554                }
555                "_valueContactPoint" => {
556                    raw_value.element("ContactPoint", value, path)?;
557                }
558                "valueCount" => {
559                    raw_value.value("Count", value, path)?;
560                }
561                "_valueCount" => {
562                    raw_value.element("Count", value, path)?;
563                }
564                "valueDistance" => {
565                    raw_value.value("Distance", value, path)?;
566                }
567                "_valueDistance" => {
568                    raw_value.element("Distance", value, path)?;
569                }
570                "valueDuration" => {
571                    raw_value.value("Duration", value, path)?;
572                }
573                "_valueDuration" => {
574                    raw_value.element("Duration", value, path)?;
575                }
576                "valueHumanName" => {
577                    raw_value.value("HumanName", value, path)?;
578                }
579                "_valueHumanName" => {
580                    raw_value.element("HumanName", value, path)?;
581                }
582                "valueIdentifier" => {
583                    raw_value.value("Identifier", value, path)?;
584                }
585                "_valueIdentifier" => {
586                    raw_value.element("Identifier", value, path)?;
587                }
588                "valueMoney" => {
589                    raw_value.value("Money", value, path)?;
590                }
591                "_valueMoney" => {
592                    raw_value.element("Money", value, path)?;
593                }
594                "valuePeriod" => {
595                    raw_value.value("Period", value, path)?;
596                }
597                "_valuePeriod" => {
598                    raw_value.element("Period", value, path)?;
599                }
600                "valueQuantity" => {
601                    raw_value.value("Quantity", value, path)?;
602                }
603                "_valueQuantity" => {
604                    raw_value.element("Quantity", value, path)?;
605                }
606                "valueRange" => {
607                    raw_value.value("Range", value, path)?;
608                }
609                "_valueRange" => {
610                    raw_value.element("Range", value, path)?;
611                }
612                "valueRatio" => {
613                    raw_value.value("Ratio", value, path)?;
614                }
615                "_valueRatio" => {
616                    raw_value.element("Ratio", value, path)?;
617                }
618                "valueRatioRange" => {
619                    raw_value.value("RatioRange", value, path)?;
620                }
621                "_valueRatioRange" => {
622                    raw_value.element("RatioRange", value, path)?;
623                }
624                "valueReference" => {
625                    raw_value.value("Reference", value, path)?;
626                }
627                "_valueReference" => {
628                    raw_value.element("Reference", value, path)?;
629                }
630                "valueSampledData" => {
631                    raw_value.value("SampledData", value, path)?;
632                }
633                "_valueSampledData" => {
634                    raw_value.element("SampledData", value, path)?;
635                }
636                "valueSignature" => {
637                    raw_value.value("Signature", value, path)?;
638                }
639                "_valueSignature" => {
640                    raw_value.element("Signature", value, path)?;
641                }
642                "valueTiming" => {
643                    raw_value.value("Timing", value, path)?;
644                }
645                "_valueTiming" => {
646                    raw_value.element("Timing", value, path)?;
647                }
648                "valueContactDetail" => {
649                    raw_value.value("ContactDetail", value, path)?;
650                }
651                "_valueContactDetail" => {
652                    raw_value.element("ContactDetail", value, path)?;
653                }
654                "valueDataRequirement" => {
655                    raw_value.value("DataRequirement", value, path)?;
656                }
657                "_valueDataRequirement" => {
658                    raw_value.element("DataRequirement", value, path)?;
659                }
660                "valueExpression" => {
661                    raw_value.value("Expression", value, path)?;
662                }
663                "_valueExpression" => {
664                    raw_value.element("Expression", value, path)?;
665                }
666                "valueParameterDefinition" => {
667                    raw_value.value("ParameterDefinition", value, path)?;
668                }
669                "_valueParameterDefinition" => {
670                    raw_value.element("ParameterDefinition", value, path)?;
671                }
672                "valueRelatedArtifact" => {
673                    raw_value.value("RelatedArtifact", value, path)?;
674                }
675                "_valueRelatedArtifact" => {
676                    raw_value.element("RelatedArtifact", value, path)?;
677                }
678                "valueTriggerDefinition" => {
679                    raw_value.value("TriggerDefinition", value, path)?;
680                }
681                "_valueTriggerDefinition" => {
682                    raw_value.element("TriggerDefinition", value, path)?;
683                }
684                "valueUsageContext" => {
685                    raw_value.value("UsageContext", value, path)?;
686                }
687                "_valueUsageContext" => {
688                    raw_value.element("UsageContext", value, path)?;
689                }
690                "valueAvailability" => {
691                    raw_value.value("Availability", value, path)?;
692                }
693                "_valueAvailability" => {
694                    raw_value.element("Availability", value, path)?;
695                }
696                "valueExtendedContactDetail" => {
697                    raw_value.value("ExtendedContactDetail", value, path)?;
698                }
699                "_valueExtendedContactDetail" => {
700                    raw_value.element("ExtendedContactDetail", value, path)?;
701                }
702                "valueDosage" => {
703                    raw_value.value("Dosage", value, path)?;
704                }
705                "_valueDosage" => {
706                    raw_value.element("Dosage", value, path)?;
707                }
708                "valueMeta" => {
709                    raw_value.value("Meta", value, path)?;
710                }
711                "_valueMeta" => {
712                    raw_value.element("Meta", value, path)?;
713                }
714                "resource" => {
715                    raw_resource = Some(value);
716                }
717                "part" => {
718                    raw_part = Some(value);
719                }
720                other => {
721                    return path.with(other, |path| {
722                        Err(path.error(super::super::codec::DecodeErrorKind::UnknownProperty))
723                    });
724                }
725            }
726        }
727        let field_id = raw_id
728            .map(|value| {
729                path.with("id", |path| {
730                    let value = super::super::codec::expect_single(value, path)?;
731                    super::primitives::checked_string(
732                        super::super::codec::expect_string(value, path)?,
733                        path,
734                    )
735                })
736            })
737            .transpose()?;
738        let mut field_extension = Vec::new();
739        if let Some(raw) = raw_extension {
740            for (index, value) in path
741                .with("extension", |path| {
742                    super::super::codec::expect_array(raw, path)
743                })?
744                .iter()
745                .enumerate()
746            {
747                field_extension.push(path.with_index("extension", index, |path| {
748                    super::super::codec::Json::from_json(
749                        super::super::codec::expect_object(value, path)?,
750                        path,
751                    )
752                })?);
753            }
754        }
755        let mut field_modifier_extension = Vec::new();
756        if let Some(raw) = raw_modifier_extension {
757            for (index, value) in path
758                .with("modifierExtension", |path| {
759                    super::super::codec::expect_array(raw, path)
760                })?
761                .iter()
762                .enumerate()
763            {
764                field_modifier_extension.push(path.with_index(
765                    "modifierExtension",
766                    index,
767                    |path| {
768                        super::super::codec::Json::from_json(
769                            super::super::codec::expect_object(value, path)?,
770                            path,
771                        )
772                    },
773                )?);
774            }
775        }
776        let field_name = path.with("name", |path| {
777            super::super::codec::Primitive::from_json_parts(raw_name, raw_name_element, path)
778        })?;
779        let field_value = match raw_value.suffix {
780            None => None,
781            Some(suffix) => Some(path.with("value", |path| {
782                ParametersParameterValue::from_json_parts(
783                    suffix,
784                    raw_value.value,
785                    raw_value.element,
786                    path,
787                )
788            })?),
789        };
790        let field_resource = raw_resource
791            .map(|value| {
792                path.with("resource", |path| {
793                    super::super::codec::Json::from_json(
794                        super::super::codec::expect_object(
795                            super::super::codec::expect_single(value, path)?,
796                            path,
797                        )?,
798                        path,
799                    )
800                })
801            })
802            .transpose()?;
803        let mut field_part = Vec::new();
804        if let Some(raw) = raw_part {
805            for (index, value) in path
806                .with("part", |path| super::super::codec::expect_array(raw, path))?
807                .iter()
808                .enumerate()
809            {
810                field_part.push(path.with_index("part", index, |path| {
811                    super::super::codec::Json::from_json(
812                        super::super::codec::expect_object(value, path)?,
813                        path,
814                    )
815                })?);
816            }
817        }
818        Ok(Self {
819            id: field_id,
820            extension: field_extension,
821            modifier_extension: field_modifier_extension,
822            name: field_name,
823            value: field_value,
824            resource: field_resource,
825            part: field_part,
826        })
827    }
828}
829
830impl serde::Serialize for ParametersParameter {
831    fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
832        let mut map = serde::Serializer::serialize_map(serializer, None)?;
833        super::super::codec::element_entry(&mut map, "_name", &self.name)?;
834        match &self.value {
835            Some(ParametersParameterValue::Base64Binary(inner)) => {
836                super::super::codec::element_entry(&mut map, "_valueBase64Binary", inner)?;
837            }
838            Some(ParametersParameterValue::Boolean(inner)) => {
839                super::super::codec::element_entry(&mut map, "_valueBoolean", inner)?;
840            }
841            Some(ParametersParameterValue::Canonical(inner)) => {
842                super::super::codec::element_entry(&mut map, "_valueCanonical", inner)?;
843            }
844            Some(ParametersParameterValue::Code(inner)) => {
845                super::super::codec::element_entry(&mut map, "_valueCode", inner)?;
846            }
847            Some(ParametersParameterValue::Date(inner)) => {
848                super::super::codec::element_entry(&mut map, "_valueDate", inner)?;
849            }
850            Some(ParametersParameterValue::DateTime(inner)) => {
851                super::super::codec::element_entry(&mut map, "_valueDateTime", inner)?;
852            }
853            Some(ParametersParameterValue::Decimal(inner)) => {
854                super::super::codec::element_entry(&mut map, "_valueDecimal", inner)?;
855            }
856            Some(ParametersParameterValue::Id(inner)) => {
857                super::super::codec::element_entry(&mut map, "_valueId", inner)?;
858            }
859            Some(ParametersParameterValue::Instant(inner)) => {
860                super::super::codec::element_entry(&mut map, "_valueInstant", inner)?;
861            }
862            Some(ParametersParameterValue::Integer(inner)) => {
863                super::super::codec::element_entry(&mut map, "_valueInteger", inner)?;
864            }
865            Some(ParametersParameterValue::Integer64(inner)) => {
866                super::super::codec::element_entry(&mut map, "_valueInteger64", inner)?;
867            }
868            Some(ParametersParameterValue::Markdown(inner)) => {
869                super::super::codec::element_entry(&mut map, "_valueMarkdown", inner)?;
870            }
871            Some(ParametersParameterValue::Oid(inner)) => {
872                super::super::codec::element_entry(&mut map, "_valueOid", inner)?;
873            }
874            Some(ParametersParameterValue::PositiveInt(inner)) => {
875                super::super::codec::element_entry(&mut map, "_valuePositiveInt", inner)?;
876            }
877            Some(ParametersParameterValue::String(inner)) => {
878                super::super::codec::element_entry(&mut map, "_valueString", inner)?;
879            }
880            Some(ParametersParameterValue::Time(inner)) => {
881                super::super::codec::element_entry(&mut map, "_valueTime", inner)?;
882            }
883            Some(ParametersParameterValue::UnsignedInt(inner)) => {
884                super::super::codec::element_entry(&mut map, "_valueUnsignedInt", inner)?;
885            }
886            Some(ParametersParameterValue::Uri(inner)) => {
887                super::super::codec::element_entry(&mut map, "_valueUri", inner)?;
888            }
889            Some(ParametersParameterValue::Url(inner)) => {
890                super::super::codec::element_entry(&mut map, "_valueUrl", inner)?;
891            }
892            Some(ParametersParameterValue::Uuid(inner)) => {
893                super::super::codec::element_entry(&mut map, "_valueUuid", inner)?;
894            }
895            _ => {}
896        }
897        if !self.extension.is_empty() {
898            serde::ser::SerializeMap::serialize_entry(&mut map, "extension", &self.extension)?;
899        }
900        if let Some(v) = &self.id {
901            serde::ser::SerializeMap::serialize_entry(&mut map, "id", v)?;
902        }
903        if !self.modifier_extension.is_empty() {
904            serde::ser::SerializeMap::serialize_entry(
905                &mut map,
906                "modifierExtension",
907                &self.modifier_extension,
908            )?;
909        }
910        super::super::codec::value_entry(&mut map, "name", &self.name)?;
911        if !self.part.is_empty() {
912            serde::ser::SerializeMap::serialize_entry(&mut map, "part", &self.part)?;
913        }
914        if let Some(item) = &self.resource {
915            serde::ser::SerializeMap::serialize_entry(&mut map, "resource", item)?;
916        }
917        match &self.value {
918            Some(ParametersParameterValue::Address(inner)) => {
919                serde::ser::SerializeMap::serialize_entry(
920                    &mut map,
921                    "valueAddress",
922                    inner.as_ref(),
923                )?;
924            }
925            Some(ParametersParameterValue::Age(inner)) => {
926                serde::ser::SerializeMap::serialize_entry(&mut map, "valueAge", inner.as_ref())?;
927            }
928            Some(ParametersParameterValue::Annotation(inner)) => {
929                serde::ser::SerializeMap::serialize_entry(
930                    &mut map,
931                    "valueAnnotation",
932                    inner.as_ref(),
933                )?;
934            }
935            Some(ParametersParameterValue::Attachment(inner)) => {
936                serde::ser::SerializeMap::serialize_entry(
937                    &mut map,
938                    "valueAttachment",
939                    inner.as_ref(),
940                )?;
941            }
942            Some(ParametersParameterValue::Availability(inner)) => {
943                serde::ser::SerializeMap::serialize_entry(
944                    &mut map,
945                    "valueAvailability",
946                    inner.as_ref(),
947                )?;
948            }
949            Some(ParametersParameterValue::Base64Binary(inner)) => {
950                super::super::codec::value_entry(&mut map, "valueBase64Binary", inner)?;
951            }
952            Some(ParametersParameterValue::Boolean(inner)) => {
953                super::super::codec::value_entry(&mut map, "valueBoolean", inner)?;
954            }
955            Some(ParametersParameterValue::Canonical(inner)) => {
956                super::super::codec::value_entry(&mut map, "valueCanonical", inner)?;
957            }
958            Some(ParametersParameterValue::Code(inner)) => {
959                super::super::codec::value_entry(&mut map, "valueCode", inner)?;
960            }
961            Some(ParametersParameterValue::CodeableConcept(inner)) => {
962                serde::ser::SerializeMap::serialize_entry(
963                    &mut map,
964                    "valueCodeableConcept",
965                    inner.as_ref(),
966                )?;
967            }
968            Some(ParametersParameterValue::CodeableReference(inner)) => {
969                serde::ser::SerializeMap::serialize_entry(
970                    &mut map,
971                    "valueCodeableReference",
972                    inner.as_ref(),
973                )?;
974            }
975            Some(ParametersParameterValue::Coding(inner)) => {
976                serde::ser::SerializeMap::serialize_entry(&mut map, "valueCoding", inner.as_ref())?;
977            }
978            Some(ParametersParameterValue::ContactDetail(inner)) => {
979                serde::ser::SerializeMap::serialize_entry(
980                    &mut map,
981                    "valueContactDetail",
982                    inner.as_ref(),
983                )?;
984            }
985            Some(ParametersParameterValue::ContactPoint(inner)) => {
986                serde::ser::SerializeMap::serialize_entry(
987                    &mut map,
988                    "valueContactPoint",
989                    inner.as_ref(),
990                )?;
991            }
992            Some(ParametersParameterValue::Count(inner)) => {
993                serde::ser::SerializeMap::serialize_entry(&mut map, "valueCount", inner.as_ref())?;
994            }
995            Some(ParametersParameterValue::DataRequirement(inner)) => {
996                serde::ser::SerializeMap::serialize_entry(
997                    &mut map,
998                    "valueDataRequirement",
999                    inner.as_ref(),
1000                )?;
1001            }
1002            Some(ParametersParameterValue::Date(inner)) => {
1003                super::super::codec::value_entry(&mut map, "valueDate", inner)?;
1004            }
1005            Some(ParametersParameterValue::DateTime(inner)) => {
1006                super::super::codec::value_entry(&mut map, "valueDateTime", inner)?;
1007            }
1008            Some(ParametersParameterValue::Decimal(inner)) => {
1009                super::super::codec::value_entry(&mut map, "valueDecimal", inner)?;
1010            }
1011            Some(ParametersParameterValue::Distance(inner)) => {
1012                serde::ser::SerializeMap::serialize_entry(
1013                    &mut map,
1014                    "valueDistance",
1015                    inner.as_ref(),
1016                )?;
1017            }
1018            Some(ParametersParameterValue::Dosage(inner)) => {
1019                serde::ser::SerializeMap::serialize_entry(&mut map, "valueDosage", inner.as_ref())?;
1020            }
1021            Some(ParametersParameterValue::Duration(inner)) => {
1022                serde::ser::SerializeMap::serialize_entry(
1023                    &mut map,
1024                    "valueDuration",
1025                    inner.as_ref(),
1026                )?;
1027            }
1028            Some(ParametersParameterValue::Expression(inner)) => {
1029                serde::ser::SerializeMap::serialize_entry(
1030                    &mut map,
1031                    "valueExpression",
1032                    inner.as_ref(),
1033                )?;
1034            }
1035            Some(ParametersParameterValue::ExtendedContactDetail(inner)) => {
1036                serde::ser::SerializeMap::serialize_entry(
1037                    &mut map,
1038                    "valueExtendedContactDetail",
1039                    inner.as_ref(),
1040                )?;
1041            }
1042            Some(ParametersParameterValue::HumanName(inner)) => {
1043                serde::ser::SerializeMap::serialize_entry(
1044                    &mut map,
1045                    "valueHumanName",
1046                    inner.as_ref(),
1047                )?;
1048            }
1049            Some(ParametersParameterValue::Id(inner)) => {
1050                super::super::codec::value_entry(&mut map, "valueId", inner)?;
1051            }
1052            Some(ParametersParameterValue::Identifier(inner)) => {
1053                serde::ser::SerializeMap::serialize_entry(
1054                    &mut map,
1055                    "valueIdentifier",
1056                    inner.as_ref(),
1057                )?;
1058            }
1059            Some(ParametersParameterValue::Instant(inner)) => {
1060                super::super::codec::value_entry(&mut map, "valueInstant", inner)?;
1061            }
1062            Some(ParametersParameterValue::Integer(inner)) => {
1063                super::super::codec::value_entry(&mut map, "valueInteger", inner)?;
1064            }
1065            Some(ParametersParameterValue::Integer64(inner)) => {
1066                super::super::codec::value_entry(&mut map, "valueInteger64", inner)?;
1067            }
1068            Some(ParametersParameterValue::Markdown(inner)) => {
1069                super::super::codec::value_entry(&mut map, "valueMarkdown", inner)?;
1070            }
1071            Some(ParametersParameterValue::Meta(inner)) => {
1072                serde::ser::SerializeMap::serialize_entry(&mut map, "valueMeta", inner.as_ref())?;
1073            }
1074            Some(ParametersParameterValue::Money(inner)) => {
1075                serde::ser::SerializeMap::serialize_entry(&mut map, "valueMoney", inner.as_ref())?;
1076            }
1077            Some(ParametersParameterValue::Oid(inner)) => {
1078                super::super::codec::value_entry(&mut map, "valueOid", inner)?;
1079            }
1080            Some(ParametersParameterValue::ParameterDefinition(inner)) => {
1081                serde::ser::SerializeMap::serialize_entry(
1082                    &mut map,
1083                    "valueParameterDefinition",
1084                    inner.as_ref(),
1085                )?;
1086            }
1087            Some(ParametersParameterValue::Period(inner)) => {
1088                serde::ser::SerializeMap::serialize_entry(&mut map, "valuePeriod", inner.as_ref())?;
1089            }
1090            Some(ParametersParameterValue::PositiveInt(inner)) => {
1091                super::super::codec::value_entry(&mut map, "valuePositiveInt", inner)?;
1092            }
1093            Some(ParametersParameterValue::Quantity(inner)) => {
1094                serde::ser::SerializeMap::serialize_entry(
1095                    &mut map,
1096                    "valueQuantity",
1097                    inner.as_ref(),
1098                )?;
1099            }
1100            Some(ParametersParameterValue::Range(inner)) => {
1101                serde::ser::SerializeMap::serialize_entry(&mut map, "valueRange", inner.as_ref())?;
1102            }
1103            Some(ParametersParameterValue::Ratio(inner)) => {
1104                serde::ser::SerializeMap::serialize_entry(&mut map, "valueRatio", inner.as_ref())?;
1105            }
1106            Some(ParametersParameterValue::RatioRange(inner)) => {
1107                serde::ser::SerializeMap::serialize_entry(
1108                    &mut map,
1109                    "valueRatioRange",
1110                    inner.as_ref(),
1111                )?;
1112            }
1113            Some(ParametersParameterValue::Reference(inner)) => {
1114                serde::ser::SerializeMap::serialize_entry(
1115                    &mut map,
1116                    "valueReference",
1117                    inner.as_ref(),
1118                )?;
1119            }
1120            Some(ParametersParameterValue::RelatedArtifact(inner)) => {
1121                serde::ser::SerializeMap::serialize_entry(
1122                    &mut map,
1123                    "valueRelatedArtifact",
1124                    inner.as_ref(),
1125                )?;
1126            }
1127            Some(ParametersParameterValue::SampledData(inner)) => {
1128                serde::ser::SerializeMap::serialize_entry(
1129                    &mut map,
1130                    "valueSampledData",
1131                    inner.as_ref(),
1132                )?;
1133            }
1134            Some(ParametersParameterValue::Signature(inner)) => {
1135                serde::ser::SerializeMap::serialize_entry(
1136                    &mut map,
1137                    "valueSignature",
1138                    inner.as_ref(),
1139                )?;
1140            }
1141            Some(ParametersParameterValue::String(inner)) => {
1142                super::super::codec::value_entry(&mut map, "valueString", inner)?;
1143            }
1144            Some(ParametersParameterValue::Time(inner)) => {
1145                super::super::codec::value_entry(&mut map, "valueTime", inner)?;
1146            }
1147            Some(ParametersParameterValue::Timing(inner)) => {
1148                serde::ser::SerializeMap::serialize_entry(&mut map, "valueTiming", inner.as_ref())?;
1149            }
1150            Some(ParametersParameterValue::TriggerDefinition(inner)) => {
1151                serde::ser::SerializeMap::serialize_entry(
1152                    &mut map,
1153                    "valueTriggerDefinition",
1154                    inner.as_ref(),
1155                )?;
1156            }
1157            Some(ParametersParameterValue::UnsignedInt(inner)) => {
1158                super::super::codec::value_entry(&mut map, "valueUnsignedInt", inner)?;
1159            }
1160            Some(ParametersParameterValue::Uri(inner)) => {
1161                super::super::codec::value_entry(&mut map, "valueUri", inner)?;
1162            }
1163            Some(ParametersParameterValue::Url(inner)) => {
1164                super::super::codec::value_entry(&mut map, "valueUrl", inner)?;
1165            }
1166            Some(ParametersParameterValue::UsageContext(inner)) => {
1167                serde::ser::SerializeMap::serialize_entry(
1168                    &mut map,
1169                    "valueUsageContext",
1170                    inner.as_ref(),
1171                )?;
1172            }
1173            Some(ParametersParameterValue::Uuid(inner)) => {
1174                super::super::codec::value_entry(&mut map, "valueUuid", inner)?;
1175            }
1176            None => {}
1177        }
1178        serde::ser::SerializeMap::end(map)
1179    }
1180}
1181
1182impl<'de> serde::Deserialize<'de> for ParametersParameter {
1183    fn deserialize<D: serde::Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
1184        let value = <super::super::codec::Value as serde::Deserialize>::deserialize(deserializer)?;
1185        let mut path = super::super::codec::Path::root("ParametersParameter");
1186        let object =
1187            super::super::codec::expect_object(&value, &path).map_err(serde::de::Error::custom)?;
1188        super::super::codec::Json::from_json(object, &mut path).map_err(serde::de::Error::custom)
1189    }
1190}
1191
1192/// The \`value\[x\]\` choice of \`ParametersParameter\`.
1193///
1194/// Conveys the content if the parameter is a data type.
1195#[derive(Debug, Clone, PartialEq, Eq)]
1196pub enum ParametersParameterValue {
1197    /// The `base64Binary` form.
1198    Base64Binary(super::primitives::Base64Binary),
1199    /// The `boolean` form.
1200    Boolean(super::primitives::Boolean),
1201    /// The `canonical` form.
1202    Canonical(super::primitives::Canonical),
1203    /// The `code` form.
1204    Code(super::primitives::Code),
1205    /// The `date` form.
1206    Date(super::primitives::Date),
1207    /// The `dateTime` form.
1208    DateTime(super::primitives::DateTime),
1209    /// The `decimal` form.
1210    Decimal(super::primitives::Decimal),
1211    /// The `id` form.
1212    Id(super::primitives::Id),
1213    /// The `instant` form.
1214    Instant(super::primitives::Instant),
1215    /// The `integer` form.
1216    Integer(super::primitives::Integer),
1217    /// The `integer64` form.
1218    Integer64(super::primitives::Integer64),
1219    /// The `markdown` form.
1220    Markdown(super::primitives::Markdown),
1221    /// The `oid` form.
1222    Oid(super::primitives::Oid),
1223    /// The `positiveInt` form.
1224    PositiveInt(super::primitives::PositiveInt),
1225    /// The `string` form.
1226    String(super::primitives::String),
1227    /// The `time` form.
1228    Time(super::primitives::Time),
1229    /// The `unsignedInt` form.
1230    UnsignedInt(super::primitives::UnsignedInt),
1231    /// The `uri` form.
1232    Uri(super::primitives::Uri),
1233    /// The `url` form.
1234    Url(super::primitives::Url),
1235    /// The `uuid` form.
1236    Uuid(super::primitives::Uuid),
1237    /// The `Address` form.
1238    Address(Box<super::address::Address>),
1239    /// The `Age` form.
1240    Age(Box<super::age::Age>),
1241    /// The `Annotation` form.
1242    Annotation(Box<super::annotation::Annotation>),
1243    /// The `Attachment` form.
1244    Attachment(Box<super::attachment::Attachment>),
1245    /// The `CodeableConcept` form.
1246    CodeableConcept(Box<super::codeable_concept::CodeableConcept>),
1247    /// The `CodeableReference` form.
1248    CodeableReference(Box<super::codeable_reference::CodeableReference>),
1249    /// The `Coding` form.
1250    Coding(Box<super::coding::Coding>),
1251    /// The `ContactPoint` form.
1252    ContactPoint(Box<super::contact_point::ContactPoint>),
1253    /// The `Count` form.
1254    Count(Box<super::count::Count>),
1255    /// The `Distance` form.
1256    Distance(Box<super::distance::Distance>),
1257    /// The `Duration` form.
1258    Duration(Box<super::duration::Duration>),
1259    /// The `HumanName` form.
1260    HumanName(Box<super::human_name::HumanName>),
1261    /// The `Identifier` form.
1262    Identifier(Box<super::identifier::Identifier>),
1263    /// The `Money` form.
1264    Money(Box<super::money::Money>),
1265    /// The `Period` form.
1266    Period(Box<super::period::Period>),
1267    /// The `Quantity` form.
1268    Quantity(Box<super::quantity::Quantity>),
1269    /// The `Range` form.
1270    Range(Box<super::range::Range>),
1271    /// The `Ratio` form.
1272    Ratio(Box<super::ratio::Ratio>),
1273    /// The `RatioRange` form.
1274    RatioRange(Box<super::ratio_range::RatioRange>),
1275    /// The `Reference` form.
1276    Reference(Box<super::reference::Reference>),
1277    /// The `SampledData` form.
1278    SampledData(Box<super::sampled_data::SampledData>),
1279    /// The `Signature` form.
1280    Signature(Box<super::signature::Signature>),
1281    /// The `Timing` form.
1282    Timing(Box<super::timing::Timing>),
1283    /// The `ContactDetail` form.
1284    ContactDetail(Box<super::contact_detail::ContactDetail>),
1285    /// The `DataRequirement` form.
1286    DataRequirement(Box<super::data_requirement::DataRequirement>),
1287    /// The `Expression` form.
1288    Expression(Box<super::expression::Expression>),
1289    /// The `ParameterDefinition` form.
1290    ParameterDefinition(Box<super::parameter_definition::ParameterDefinition>),
1291    /// The `RelatedArtifact` form.
1292    RelatedArtifact(Box<super::related_artifact::RelatedArtifact>),
1293    /// The `TriggerDefinition` form.
1294    TriggerDefinition(Box<super::trigger_definition::TriggerDefinition>),
1295    /// The `UsageContext` form.
1296    UsageContext(Box<super::usage_context::UsageContext>),
1297    /// The `Availability` form.
1298    Availability(Box<super::availability::Availability>),
1299    /// The `ExtendedContactDetail` form.
1300    ExtendedContactDetail(Box<super::extended_contact_detail::ExtendedContactDetail>),
1301    /// The `Dosage` form.
1302    Dosage(Box<super::dosage::Dosage>),
1303    /// The `Meta` form.
1304    Meta(Box<super::meta::Meta>),
1305}
1306
1307impl ParametersParameterValue {
1308    /// The key suffix, the value part, and the `_name` part of this form.
1309    ///
1310    /// # Errors
1311    ///
1312    /// Returns [`super::super::codec::EncodeError`] when a held value has no JSON form.
1313    pub fn to_json_parts(
1314        &self,
1315    ) -> Result<
1316        (
1317            &'static str,
1318            Option<super::super::codec::Value>,
1319            Option<super::super::codec::Value>,
1320        ),
1321        super::super::codec::EncodeError,
1322    > {
1323        match self {
1324            Self::Base64Binary(inner) => Ok((
1325                "Base64Binary",
1326                super::super::codec::Primitive::value_json(inner)?,
1327                super::super::codec::Primitive::element_json(inner)?,
1328            )),
1329            Self::Boolean(inner) => Ok((
1330                "Boolean",
1331                super::super::codec::Primitive::value_json(inner)?,
1332                super::super::codec::Primitive::element_json(inner)?,
1333            )),
1334            Self::Canonical(inner) => Ok((
1335                "Canonical",
1336                super::super::codec::Primitive::value_json(inner)?,
1337                super::super::codec::Primitive::element_json(inner)?,
1338            )),
1339            Self::Code(inner) => Ok((
1340                "Code",
1341                super::super::codec::Primitive::value_json(inner)?,
1342                super::super::codec::Primitive::element_json(inner)?,
1343            )),
1344            Self::Date(inner) => Ok((
1345                "Date",
1346                super::super::codec::Primitive::value_json(inner)?,
1347                super::super::codec::Primitive::element_json(inner)?,
1348            )),
1349            Self::DateTime(inner) => Ok((
1350                "DateTime",
1351                super::super::codec::Primitive::value_json(inner)?,
1352                super::super::codec::Primitive::element_json(inner)?,
1353            )),
1354            Self::Decimal(inner) => Ok((
1355                "Decimal",
1356                super::super::codec::Primitive::value_json(inner)?,
1357                super::super::codec::Primitive::element_json(inner)?,
1358            )),
1359            Self::Id(inner) => Ok((
1360                "Id",
1361                super::super::codec::Primitive::value_json(inner)?,
1362                super::super::codec::Primitive::element_json(inner)?,
1363            )),
1364            Self::Instant(inner) => Ok((
1365                "Instant",
1366                super::super::codec::Primitive::value_json(inner)?,
1367                super::super::codec::Primitive::element_json(inner)?,
1368            )),
1369            Self::Integer(inner) => Ok((
1370                "Integer",
1371                super::super::codec::Primitive::value_json(inner)?,
1372                super::super::codec::Primitive::element_json(inner)?,
1373            )),
1374            Self::Integer64(inner) => Ok((
1375                "Integer64",
1376                super::super::codec::Primitive::value_json(inner)?,
1377                super::super::codec::Primitive::element_json(inner)?,
1378            )),
1379            Self::Markdown(inner) => Ok((
1380                "Markdown",
1381                super::super::codec::Primitive::value_json(inner)?,
1382                super::super::codec::Primitive::element_json(inner)?,
1383            )),
1384            Self::Oid(inner) => Ok((
1385                "Oid",
1386                super::super::codec::Primitive::value_json(inner)?,
1387                super::super::codec::Primitive::element_json(inner)?,
1388            )),
1389            Self::PositiveInt(inner) => Ok((
1390                "PositiveInt",
1391                super::super::codec::Primitive::value_json(inner)?,
1392                super::super::codec::Primitive::element_json(inner)?,
1393            )),
1394            Self::String(inner) => Ok((
1395                "String",
1396                super::super::codec::Primitive::value_json(inner)?,
1397                super::super::codec::Primitive::element_json(inner)?,
1398            )),
1399            Self::Time(inner) => Ok((
1400                "Time",
1401                super::super::codec::Primitive::value_json(inner)?,
1402                super::super::codec::Primitive::element_json(inner)?,
1403            )),
1404            Self::UnsignedInt(inner) => Ok((
1405                "UnsignedInt",
1406                super::super::codec::Primitive::value_json(inner)?,
1407                super::super::codec::Primitive::element_json(inner)?,
1408            )),
1409            Self::Uri(inner) => Ok((
1410                "Uri",
1411                super::super::codec::Primitive::value_json(inner)?,
1412                super::super::codec::Primitive::element_json(inner)?,
1413            )),
1414            Self::Url(inner) => Ok((
1415                "Url",
1416                super::super::codec::Primitive::value_json(inner)?,
1417                super::super::codec::Primitive::element_json(inner)?,
1418            )),
1419            Self::Uuid(inner) => Ok((
1420                "Uuid",
1421                super::super::codec::Primitive::value_json(inner)?,
1422                super::super::codec::Primitive::element_json(inner)?,
1423            )),
1424            Self::Address(inner) => Ok((
1425                "Address",
1426                Some(super::super::codec::Value::Object(
1427                    super::super::codec::Json::to_json(inner.as_ref())?,
1428                )),
1429                None,
1430            )),
1431            Self::Age(inner) => Ok((
1432                "Age",
1433                Some(super::super::codec::Value::Object(
1434                    super::super::codec::Json::to_json(inner.as_ref())?,
1435                )),
1436                None,
1437            )),
1438            Self::Annotation(inner) => Ok((
1439                "Annotation",
1440                Some(super::super::codec::Value::Object(
1441                    super::super::codec::Json::to_json(inner.as_ref())?,
1442                )),
1443                None,
1444            )),
1445            Self::Attachment(inner) => Ok((
1446                "Attachment",
1447                Some(super::super::codec::Value::Object(
1448                    super::super::codec::Json::to_json(inner.as_ref())?,
1449                )),
1450                None,
1451            )),
1452            Self::CodeableConcept(inner) => Ok((
1453                "CodeableConcept",
1454                Some(super::super::codec::Value::Object(
1455                    super::super::codec::Json::to_json(inner.as_ref())?,
1456                )),
1457                None,
1458            )),
1459            Self::CodeableReference(inner) => Ok((
1460                "CodeableReference",
1461                Some(super::super::codec::Value::Object(
1462                    super::super::codec::Json::to_json(inner.as_ref())?,
1463                )),
1464                None,
1465            )),
1466            Self::Coding(inner) => Ok((
1467                "Coding",
1468                Some(super::super::codec::Value::Object(
1469                    super::super::codec::Json::to_json(inner.as_ref())?,
1470                )),
1471                None,
1472            )),
1473            Self::ContactPoint(inner) => Ok((
1474                "ContactPoint",
1475                Some(super::super::codec::Value::Object(
1476                    super::super::codec::Json::to_json(inner.as_ref())?,
1477                )),
1478                None,
1479            )),
1480            Self::Count(inner) => Ok((
1481                "Count",
1482                Some(super::super::codec::Value::Object(
1483                    super::super::codec::Json::to_json(inner.as_ref())?,
1484                )),
1485                None,
1486            )),
1487            Self::Distance(inner) => Ok((
1488                "Distance",
1489                Some(super::super::codec::Value::Object(
1490                    super::super::codec::Json::to_json(inner.as_ref())?,
1491                )),
1492                None,
1493            )),
1494            Self::Duration(inner) => Ok((
1495                "Duration",
1496                Some(super::super::codec::Value::Object(
1497                    super::super::codec::Json::to_json(inner.as_ref())?,
1498                )),
1499                None,
1500            )),
1501            Self::HumanName(inner) => Ok((
1502                "HumanName",
1503                Some(super::super::codec::Value::Object(
1504                    super::super::codec::Json::to_json(inner.as_ref())?,
1505                )),
1506                None,
1507            )),
1508            Self::Identifier(inner) => Ok((
1509                "Identifier",
1510                Some(super::super::codec::Value::Object(
1511                    super::super::codec::Json::to_json(inner.as_ref())?,
1512                )),
1513                None,
1514            )),
1515            Self::Money(inner) => Ok((
1516                "Money",
1517                Some(super::super::codec::Value::Object(
1518                    super::super::codec::Json::to_json(inner.as_ref())?,
1519                )),
1520                None,
1521            )),
1522            Self::Period(inner) => Ok((
1523                "Period",
1524                Some(super::super::codec::Value::Object(
1525                    super::super::codec::Json::to_json(inner.as_ref())?,
1526                )),
1527                None,
1528            )),
1529            Self::Quantity(inner) => Ok((
1530                "Quantity",
1531                Some(super::super::codec::Value::Object(
1532                    super::super::codec::Json::to_json(inner.as_ref())?,
1533                )),
1534                None,
1535            )),
1536            Self::Range(inner) => Ok((
1537                "Range",
1538                Some(super::super::codec::Value::Object(
1539                    super::super::codec::Json::to_json(inner.as_ref())?,
1540                )),
1541                None,
1542            )),
1543            Self::Ratio(inner) => Ok((
1544                "Ratio",
1545                Some(super::super::codec::Value::Object(
1546                    super::super::codec::Json::to_json(inner.as_ref())?,
1547                )),
1548                None,
1549            )),
1550            Self::RatioRange(inner) => Ok((
1551                "RatioRange",
1552                Some(super::super::codec::Value::Object(
1553                    super::super::codec::Json::to_json(inner.as_ref())?,
1554                )),
1555                None,
1556            )),
1557            Self::Reference(inner) => Ok((
1558                "Reference",
1559                Some(super::super::codec::Value::Object(
1560                    super::super::codec::Json::to_json(inner.as_ref())?,
1561                )),
1562                None,
1563            )),
1564            Self::SampledData(inner) => Ok((
1565                "SampledData",
1566                Some(super::super::codec::Value::Object(
1567                    super::super::codec::Json::to_json(inner.as_ref())?,
1568                )),
1569                None,
1570            )),
1571            Self::Signature(inner) => Ok((
1572                "Signature",
1573                Some(super::super::codec::Value::Object(
1574                    super::super::codec::Json::to_json(inner.as_ref())?,
1575                )),
1576                None,
1577            )),
1578            Self::Timing(inner) => Ok((
1579                "Timing",
1580                Some(super::super::codec::Value::Object(
1581                    super::super::codec::Json::to_json(inner.as_ref())?,
1582                )),
1583                None,
1584            )),
1585            Self::ContactDetail(inner) => Ok((
1586                "ContactDetail",
1587                Some(super::super::codec::Value::Object(
1588                    super::super::codec::Json::to_json(inner.as_ref())?,
1589                )),
1590                None,
1591            )),
1592            Self::DataRequirement(inner) => Ok((
1593                "DataRequirement",
1594                Some(super::super::codec::Value::Object(
1595                    super::super::codec::Json::to_json(inner.as_ref())?,
1596                )),
1597                None,
1598            )),
1599            Self::Expression(inner) => Ok((
1600                "Expression",
1601                Some(super::super::codec::Value::Object(
1602                    super::super::codec::Json::to_json(inner.as_ref())?,
1603                )),
1604                None,
1605            )),
1606            Self::ParameterDefinition(inner) => Ok((
1607                "ParameterDefinition",
1608                Some(super::super::codec::Value::Object(
1609                    super::super::codec::Json::to_json(inner.as_ref())?,
1610                )),
1611                None,
1612            )),
1613            Self::RelatedArtifact(inner) => Ok((
1614                "RelatedArtifact",
1615                Some(super::super::codec::Value::Object(
1616                    super::super::codec::Json::to_json(inner.as_ref())?,
1617                )),
1618                None,
1619            )),
1620            Self::TriggerDefinition(inner) => Ok((
1621                "TriggerDefinition",
1622                Some(super::super::codec::Value::Object(
1623                    super::super::codec::Json::to_json(inner.as_ref())?,
1624                )),
1625                None,
1626            )),
1627            Self::UsageContext(inner) => Ok((
1628                "UsageContext",
1629                Some(super::super::codec::Value::Object(
1630                    super::super::codec::Json::to_json(inner.as_ref())?,
1631                )),
1632                None,
1633            )),
1634            Self::Availability(inner) => Ok((
1635                "Availability",
1636                Some(super::super::codec::Value::Object(
1637                    super::super::codec::Json::to_json(inner.as_ref())?,
1638                )),
1639                None,
1640            )),
1641            Self::ExtendedContactDetail(inner) => Ok((
1642                "ExtendedContactDetail",
1643                Some(super::super::codec::Value::Object(
1644                    super::super::codec::Json::to_json(inner.as_ref())?,
1645                )),
1646                None,
1647            )),
1648            Self::Dosage(inner) => Ok((
1649                "Dosage",
1650                Some(super::super::codec::Value::Object(
1651                    super::super::codec::Json::to_json(inner.as_ref())?,
1652                )),
1653                None,
1654            )),
1655            Self::Meta(inner) => Ok((
1656                "Meta",
1657                Some(super::super::codec::Value::Object(
1658                    super::super::codec::Json::to_json(inner.as_ref())?,
1659                )),
1660                None,
1661            )),
1662        }
1663    }
1664
1665    /// Decodes the form named by `suffix` from its value and `_name` parts.
1666    ///
1667    /// # Errors
1668    ///
1669    /// Returns [`super::super::codec::DecodeError`] for an unknown suffix or a malformed part.
1670    pub fn from_json_parts(
1671        suffix: &str,
1672        value: Option<&super::super::codec::Value>,
1673        element: Option<&super::super::codec::Value>,
1674        path: &mut super::super::codec::Path,
1675    ) -> Result<Self, super::super::codec::DecodeError> {
1676        match suffix {
1677            "Base64Binary" => Ok(Self::Base64Binary(
1678                super::super::codec::Primitive::from_json_parts(value, element, path)?,
1679            )),
1680            "Boolean" => Ok(Self::Boolean(
1681                super::super::codec::Primitive::from_json_parts(value, element, path)?,
1682            )),
1683            "Canonical" => Ok(Self::Canonical(
1684                super::super::codec::Primitive::from_json_parts(value, element, path)?,
1685            )),
1686            "Code" => Ok(Self::Code(super::super::codec::Primitive::from_json_parts(
1687                value, element, path,
1688            )?)),
1689            "Date" => Ok(Self::Date(super::super::codec::Primitive::from_json_parts(
1690                value, element, path,
1691            )?)),
1692            "DateTime" => Ok(Self::DateTime(
1693                super::super::codec::Primitive::from_json_parts(value, element, path)?,
1694            )),
1695            "Decimal" => Ok(Self::Decimal(
1696                super::super::codec::Primitive::from_json_parts(value, element, path)?,
1697            )),
1698            "Id" => Ok(Self::Id(super::super::codec::Primitive::from_json_parts(
1699                value, element, path,
1700            )?)),
1701            "Instant" => Ok(Self::Instant(
1702                super::super::codec::Primitive::from_json_parts(value, element, path)?,
1703            )),
1704            "Integer" => Ok(Self::Integer(
1705                super::super::codec::Primitive::from_json_parts(value, element, path)?,
1706            )),
1707            "Integer64" => Ok(Self::Integer64(
1708                super::super::codec::Primitive::from_json_parts(value, element, path)?,
1709            )),
1710            "Markdown" => Ok(Self::Markdown(
1711                super::super::codec::Primitive::from_json_parts(value, element, path)?,
1712            )),
1713            "Oid" => Ok(Self::Oid(super::super::codec::Primitive::from_json_parts(
1714                value, element, path,
1715            )?)),
1716            "PositiveInt" => Ok(Self::PositiveInt(
1717                super::super::codec::Primitive::from_json_parts(value, element, path)?,
1718            )),
1719            "String" => Ok(Self::String(
1720                super::super::codec::Primitive::from_json_parts(value, element, path)?,
1721            )),
1722            "Time" => Ok(Self::Time(super::super::codec::Primitive::from_json_parts(
1723                value, element, path,
1724            )?)),
1725            "UnsignedInt" => Ok(Self::UnsignedInt(
1726                super::super::codec::Primitive::from_json_parts(value, element, path)?,
1727            )),
1728            "Uri" => Ok(Self::Uri(super::super::codec::Primitive::from_json_parts(
1729                value, element, path,
1730            )?)),
1731            "Url" => Ok(Self::Url(super::super::codec::Primitive::from_json_parts(
1732                value, element, path,
1733            )?)),
1734            "Uuid" => Ok(Self::Uuid(super::super::codec::Primitive::from_json_parts(
1735                value, element, path,
1736            )?)),
1737            "Address" => {
1738                if element.is_some() {
1739                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
1740                        expected: "no underscore form for a complex type",
1741                    }));
1742                }
1743                let value = value.ok_or_else(|| {
1744                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
1745                })?;
1746                let inner = super::super::codec::Json::from_json(
1747                    super::super::codec::expect_object(
1748                        super::super::codec::expect_single(value, path)?,
1749                        path,
1750                    )?,
1751                    path,
1752                )?;
1753                Ok(Self::Address(Box::new(inner)))
1754            }
1755            "Age" => {
1756                if element.is_some() {
1757                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
1758                        expected: "no underscore form for a complex type",
1759                    }));
1760                }
1761                let value = value.ok_or_else(|| {
1762                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
1763                })?;
1764                let inner = super::super::codec::Json::from_json(
1765                    super::super::codec::expect_object(
1766                        super::super::codec::expect_single(value, path)?,
1767                        path,
1768                    )?,
1769                    path,
1770                )?;
1771                Ok(Self::Age(Box::new(inner)))
1772            }
1773            "Annotation" => {
1774                if element.is_some() {
1775                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
1776                        expected: "no underscore form for a complex type",
1777                    }));
1778                }
1779                let value = value.ok_or_else(|| {
1780                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
1781                })?;
1782                let inner = super::super::codec::Json::from_json(
1783                    super::super::codec::expect_object(
1784                        super::super::codec::expect_single(value, path)?,
1785                        path,
1786                    )?,
1787                    path,
1788                )?;
1789                Ok(Self::Annotation(Box::new(inner)))
1790            }
1791            "Attachment" => {
1792                if element.is_some() {
1793                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
1794                        expected: "no underscore form for a complex type",
1795                    }));
1796                }
1797                let value = value.ok_or_else(|| {
1798                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
1799                })?;
1800                let inner = super::super::codec::Json::from_json(
1801                    super::super::codec::expect_object(
1802                        super::super::codec::expect_single(value, path)?,
1803                        path,
1804                    )?,
1805                    path,
1806                )?;
1807                Ok(Self::Attachment(Box::new(inner)))
1808            }
1809            "CodeableConcept" => {
1810                if element.is_some() {
1811                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
1812                        expected: "no underscore form for a complex type",
1813                    }));
1814                }
1815                let value = value.ok_or_else(|| {
1816                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
1817                })?;
1818                let inner = super::super::codec::Json::from_json(
1819                    super::super::codec::expect_object(
1820                        super::super::codec::expect_single(value, path)?,
1821                        path,
1822                    )?,
1823                    path,
1824                )?;
1825                Ok(Self::CodeableConcept(Box::new(inner)))
1826            }
1827            "CodeableReference" => {
1828                if element.is_some() {
1829                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
1830                        expected: "no underscore form for a complex type",
1831                    }));
1832                }
1833                let value = value.ok_or_else(|| {
1834                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
1835                })?;
1836                let inner = super::super::codec::Json::from_json(
1837                    super::super::codec::expect_object(
1838                        super::super::codec::expect_single(value, path)?,
1839                        path,
1840                    )?,
1841                    path,
1842                )?;
1843                Ok(Self::CodeableReference(Box::new(inner)))
1844            }
1845            "Coding" => {
1846                if element.is_some() {
1847                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
1848                        expected: "no underscore form for a complex type",
1849                    }));
1850                }
1851                let value = value.ok_or_else(|| {
1852                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
1853                })?;
1854                let inner = super::super::codec::Json::from_json(
1855                    super::super::codec::expect_object(
1856                        super::super::codec::expect_single(value, path)?,
1857                        path,
1858                    )?,
1859                    path,
1860                )?;
1861                Ok(Self::Coding(Box::new(inner)))
1862            }
1863            "ContactPoint" => {
1864                if element.is_some() {
1865                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
1866                        expected: "no underscore form for a complex type",
1867                    }));
1868                }
1869                let value = value.ok_or_else(|| {
1870                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
1871                })?;
1872                let inner = super::super::codec::Json::from_json(
1873                    super::super::codec::expect_object(
1874                        super::super::codec::expect_single(value, path)?,
1875                        path,
1876                    )?,
1877                    path,
1878                )?;
1879                Ok(Self::ContactPoint(Box::new(inner)))
1880            }
1881            "Count" => {
1882                if element.is_some() {
1883                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
1884                        expected: "no underscore form for a complex type",
1885                    }));
1886                }
1887                let value = value.ok_or_else(|| {
1888                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
1889                })?;
1890                let inner = super::super::codec::Json::from_json(
1891                    super::super::codec::expect_object(
1892                        super::super::codec::expect_single(value, path)?,
1893                        path,
1894                    )?,
1895                    path,
1896                )?;
1897                Ok(Self::Count(Box::new(inner)))
1898            }
1899            "Distance" => {
1900                if element.is_some() {
1901                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
1902                        expected: "no underscore form for a complex type",
1903                    }));
1904                }
1905                let value = value.ok_or_else(|| {
1906                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
1907                })?;
1908                let inner = super::super::codec::Json::from_json(
1909                    super::super::codec::expect_object(
1910                        super::super::codec::expect_single(value, path)?,
1911                        path,
1912                    )?,
1913                    path,
1914                )?;
1915                Ok(Self::Distance(Box::new(inner)))
1916            }
1917            "Duration" => {
1918                if element.is_some() {
1919                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
1920                        expected: "no underscore form for a complex type",
1921                    }));
1922                }
1923                let value = value.ok_or_else(|| {
1924                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
1925                })?;
1926                let inner = super::super::codec::Json::from_json(
1927                    super::super::codec::expect_object(
1928                        super::super::codec::expect_single(value, path)?,
1929                        path,
1930                    )?,
1931                    path,
1932                )?;
1933                Ok(Self::Duration(Box::new(inner)))
1934            }
1935            "HumanName" => {
1936                if element.is_some() {
1937                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
1938                        expected: "no underscore form for a complex type",
1939                    }));
1940                }
1941                let value = value.ok_or_else(|| {
1942                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
1943                })?;
1944                let inner = super::super::codec::Json::from_json(
1945                    super::super::codec::expect_object(
1946                        super::super::codec::expect_single(value, path)?,
1947                        path,
1948                    )?,
1949                    path,
1950                )?;
1951                Ok(Self::HumanName(Box::new(inner)))
1952            }
1953            "Identifier" => {
1954                if element.is_some() {
1955                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
1956                        expected: "no underscore form for a complex type",
1957                    }));
1958                }
1959                let value = value.ok_or_else(|| {
1960                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
1961                })?;
1962                let inner = super::super::codec::Json::from_json(
1963                    super::super::codec::expect_object(
1964                        super::super::codec::expect_single(value, path)?,
1965                        path,
1966                    )?,
1967                    path,
1968                )?;
1969                Ok(Self::Identifier(Box::new(inner)))
1970            }
1971            "Money" => {
1972                if element.is_some() {
1973                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
1974                        expected: "no underscore form for a complex type",
1975                    }));
1976                }
1977                let value = value.ok_or_else(|| {
1978                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
1979                })?;
1980                let inner = super::super::codec::Json::from_json(
1981                    super::super::codec::expect_object(
1982                        super::super::codec::expect_single(value, path)?,
1983                        path,
1984                    )?,
1985                    path,
1986                )?;
1987                Ok(Self::Money(Box::new(inner)))
1988            }
1989            "Period" => {
1990                if element.is_some() {
1991                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
1992                        expected: "no underscore form for a complex type",
1993                    }));
1994                }
1995                let value = value.ok_or_else(|| {
1996                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
1997                })?;
1998                let inner = super::super::codec::Json::from_json(
1999                    super::super::codec::expect_object(
2000                        super::super::codec::expect_single(value, path)?,
2001                        path,
2002                    )?,
2003                    path,
2004                )?;
2005                Ok(Self::Period(Box::new(inner)))
2006            }
2007            "Quantity" => {
2008                if element.is_some() {
2009                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
2010                        expected: "no underscore form for a complex type",
2011                    }));
2012                }
2013                let value = value.ok_or_else(|| {
2014                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
2015                })?;
2016                let inner = super::super::codec::Json::from_json(
2017                    super::super::codec::expect_object(
2018                        super::super::codec::expect_single(value, path)?,
2019                        path,
2020                    )?,
2021                    path,
2022                )?;
2023                Ok(Self::Quantity(Box::new(inner)))
2024            }
2025            "Range" => {
2026                if element.is_some() {
2027                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
2028                        expected: "no underscore form for a complex type",
2029                    }));
2030                }
2031                let value = value.ok_or_else(|| {
2032                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
2033                })?;
2034                let inner = super::super::codec::Json::from_json(
2035                    super::super::codec::expect_object(
2036                        super::super::codec::expect_single(value, path)?,
2037                        path,
2038                    )?,
2039                    path,
2040                )?;
2041                Ok(Self::Range(Box::new(inner)))
2042            }
2043            "Ratio" => {
2044                if element.is_some() {
2045                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
2046                        expected: "no underscore form for a complex type",
2047                    }));
2048                }
2049                let value = value.ok_or_else(|| {
2050                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
2051                })?;
2052                let inner = super::super::codec::Json::from_json(
2053                    super::super::codec::expect_object(
2054                        super::super::codec::expect_single(value, path)?,
2055                        path,
2056                    )?,
2057                    path,
2058                )?;
2059                Ok(Self::Ratio(Box::new(inner)))
2060            }
2061            "RatioRange" => {
2062                if element.is_some() {
2063                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
2064                        expected: "no underscore form for a complex type",
2065                    }));
2066                }
2067                let value = value.ok_or_else(|| {
2068                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
2069                })?;
2070                let inner = super::super::codec::Json::from_json(
2071                    super::super::codec::expect_object(
2072                        super::super::codec::expect_single(value, path)?,
2073                        path,
2074                    )?,
2075                    path,
2076                )?;
2077                Ok(Self::RatioRange(Box::new(inner)))
2078            }
2079            "Reference" => {
2080                if element.is_some() {
2081                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
2082                        expected: "no underscore form for a complex type",
2083                    }));
2084                }
2085                let value = value.ok_or_else(|| {
2086                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
2087                })?;
2088                let inner = super::super::codec::Json::from_json(
2089                    super::super::codec::expect_object(
2090                        super::super::codec::expect_single(value, path)?,
2091                        path,
2092                    )?,
2093                    path,
2094                )?;
2095                Ok(Self::Reference(Box::new(inner)))
2096            }
2097            "SampledData" => {
2098                if element.is_some() {
2099                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
2100                        expected: "no underscore form for a complex type",
2101                    }));
2102                }
2103                let value = value.ok_or_else(|| {
2104                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
2105                })?;
2106                let inner = super::super::codec::Json::from_json(
2107                    super::super::codec::expect_object(
2108                        super::super::codec::expect_single(value, path)?,
2109                        path,
2110                    )?,
2111                    path,
2112                )?;
2113                Ok(Self::SampledData(Box::new(inner)))
2114            }
2115            "Signature" => {
2116                if element.is_some() {
2117                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
2118                        expected: "no underscore form for a complex type",
2119                    }));
2120                }
2121                let value = value.ok_or_else(|| {
2122                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
2123                })?;
2124                let inner = super::super::codec::Json::from_json(
2125                    super::super::codec::expect_object(
2126                        super::super::codec::expect_single(value, path)?,
2127                        path,
2128                    )?,
2129                    path,
2130                )?;
2131                Ok(Self::Signature(Box::new(inner)))
2132            }
2133            "Timing" => {
2134                if element.is_some() {
2135                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
2136                        expected: "no underscore form for a complex type",
2137                    }));
2138                }
2139                let value = value.ok_or_else(|| {
2140                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
2141                })?;
2142                let inner = super::super::codec::Json::from_json(
2143                    super::super::codec::expect_object(
2144                        super::super::codec::expect_single(value, path)?,
2145                        path,
2146                    )?,
2147                    path,
2148                )?;
2149                Ok(Self::Timing(Box::new(inner)))
2150            }
2151            "ContactDetail" => {
2152                if element.is_some() {
2153                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
2154                        expected: "no underscore form for a complex type",
2155                    }));
2156                }
2157                let value = value.ok_or_else(|| {
2158                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
2159                })?;
2160                let inner = super::super::codec::Json::from_json(
2161                    super::super::codec::expect_object(
2162                        super::super::codec::expect_single(value, path)?,
2163                        path,
2164                    )?,
2165                    path,
2166                )?;
2167                Ok(Self::ContactDetail(Box::new(inner)))
2168            }
2169            "DataRequirement" => {
2170                if element.is_some() {
2171                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
2172                        expected: "no underscore form for a complex type",
2173                    }));
2174                }
2175                let value = value.ok_or_else(|| {
2176                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
2177                })?;
2178                let inner = super::super::codec::Json::from_json(
2179                    super::super::codec::expect_object(
2180                        super::super::codec::expect_single(value, path)?,
2181                        path,
2182                    )?,
2183                    path,
2184                )?;
2185                Ok(Self::DataRequirement(Box::new(inner)))
2186            }
2187            "Expression" => {
2188                if element.is_some() {
2189                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
2190                        expected: "no underscore form for a complex type",
2191                    }));
2192                }
2193                let value = value.ok_or_else(|| {
2194                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
2195                })?;
2196                let inner = super::super::codec::Json::from_json(
2197                    super::super::codec::expect_object(
2198                        super::super::codec::expect_single(value, path)?,
2199                        path,
2200                    )?,
2201                    path,
2202                )?;
2203                Ok(Self::Expression(Box::new(inner)))
2204            }
2205            "ParameterDefinition" => {
2206                if element.is_some() {
2207                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
2208                        expected: "no underscore form for a complex type",
2209                    }));
2210                }
2211                let value = value.ok_or_else(|| {
2212                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
2213                })?;
2214                let inner = super::super::codec::Json::from_json(
2215                    super::super::codec::expect_object(
2216                        super::super::codec::expect_single(value, path)?,
2217                        path,
2218                    )?,
2219                    path,
2220                )?;
2221                Ok(Self::ParameterDefinition(Box::new(inner)))
2222            }
2223            "RelatedArtifact" => {
2224                if element.is_some() {
2225                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
2226                        expected: "no underscore form for a complex type",
2227                    }));
2228                }
2229                let value = value.ok_or_else(|| {
2230                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
2231                })?;
2232                let inner = super::super::codec::Json::from_json(
2233                    super::super::codec::expect_object(
2234                        super::super::codec::expect_single(value, path)?,
2235                        path,
2236                    )?,
2237                    path,
2238                )?;
2239                Ok(Self::RelatedArtifact(Box::new(inner)))
2240            }
2241            "TriggerDefinition" => {
2242                if element.is_some() {
2243                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
2244                        expected: "no underscore form for a complex type",
2245                    }));
2246                }
2247                let value = value.ok_or_else(|| {
2248                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
2249                })?;
2250                let inner = super::super::codec::Json::from_json(
2251                    super::super::codec::expect_object(
2252                        super::super::codec::expect_single(value, path)?,
2253                        path,
2254                    )?,
2255                    path,
2256                )?;
2257                Ok(Self::TriggerDefinition(Box::new(inner)))
2258            }
2259            "UsageContext" => {
2260                if element.is_some() {
2261                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
2262                        expected: "no underscore form for a complex type",
2263                    }));
2264                }
2265                let value = value.ok_or_else(|| {
2266                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
2267                })?;
2268                let inner = super::super::codec::Json::from_json(
2269                    super::super::codec::expect_object(
2270                        super::super::codec::expect_single(value, path)?,
2271                        path,
2272                    )?,
2273                    path,
2274                )?;
2275                Ok(Self::UsageContext(Box::new(inner)))
2276            }
2277            "Availability" => {
2278                if element.is_some() {
2279                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
2280                        expected: "no underscore form for a complex type",
2281                    }));
2282                }
2283                let value = value.ok_or_else(|| {
2284                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
2285                })?;
2286                let inner = super::super::codec::Json::from_json(
2287                    super::super::codec::expect_object(
2288                        super::super::codec::expect_single(value, path)?,
2289                        path,
2290                    )?,
2291                    path,
2292                )?;
2293                Ok(Self::Availability(Box::new(inner)))
2294            }
2295            "ExtendedContactDetail" => {
2296                if element.is_some() {
2297                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
2298                        expected: "no underscore form for a complex type",
2299                    }));
2300                }
2301                let value = value.ok_or_else(|| {
2302                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
2303                })?;
2304                let inner = super::super::codec::Json::from_json(
2305                    super::super::codec::expect_object(
2306                        super::super::codec::expect_single(value, path)?,
2307                        path,
2308                    )?,
2309                    path,
2310                )?;
2311                Ok(Self::ExtendedContactDetail(Box::new(inner)))
2312            }
2313            "Dosage" => {
2314                if element.is_some() {
2315                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
2316                        expected: "no underscore form for a complex type",
2317                    }));
2318                }
2319                let value = value.ok_or_else(|| {
2320                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
2321                })?;
2322                let inner = super::super::codec::Json::from_json(
2323                    super::super::codec::expect_object(
2324                        super::super::codec::expect_single(value, path)?,
2325                        path,
2326                    )?,
2327                    path,
2328                )?;
2329                Ok(Self::Dosage(Box::new(inner)))
2330            }
2331            "Meta" => {
2332                if element.is_some() {
2333                    return Err(path.error(super::super::codec::DecodeErrorKind::WrongType {
2334                        expected: "no underscore form for a complex type",
2335                    }));
2336                }
2337                let value = value.ok_or_else(|| {
2338                    path.error(super::super::codec::DecodeErrorKind::MissingProperty)
2339                })?;
2340                let inner = super::super::codec::Json::from_json(
2341                    super::super::codec::expect_object(
2342                        super::super::codec::expect_single(value, path)?,
2343                        path,
2344                    )?,
2345                    path,
2346                )?;
2347                Ok(Self::Meta(Box::new(inner)))
2348            }
2349            _ => Err(path.error(super::super::codec::DecodeErrorKind::UnknownProperty)),
2350        }
2351    }
2352}