#![allow(
unused_imports,
clippy::large_enum_variant,
clippy::too_many_lines,
clippy::doc_markdown
)]
use crate::decode::{
choice_key, required, required_list, resource_type, Choice, Decoder, FhirJson, Obj, ObjWriter,
};
use crate::json::Json;
use crate::primitive::{Decimal, Kind, Primitive};
use crate::r4::*;
#[cfg(feature = "specialized")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct SubstanceSpecification {
pub id: Option<String>,
pub meta: Option<Meta>,
pub implicit_rules: Option<Primitive<String>>,
pub language: Option<Primitive<String>>,
pub text: Option<Narrative>,
pub contained: Vec<Resource>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub identifier: Option<Identifier>,
pub type_: Option<CodeableConcept>,
pub status: Option<CodeableConcept>,
pub domain: Option<CodeableConcept>,
pub description: Option<Primitive<String>>,
pub source: Vec<Reference>,
pub comment: Option<Primitive<String>>,
pub moiety: Vec<SubstanceSpecificationMoiety>,
pub property: Vec<SubstanceSpecificationProperty>,
pub reference_information: Option<Reference>,
pub structure: Option<SubstanceSpecificationStructure>,
pub code: Vec<SubstanceSpecificationCode>,
pub name: Vec<SubstanceSpecificationName>,
pub molecular_weight: Vec<SubstanceSpecificationStructureIsotopeMolecularWeight>,
pub relationship: Vec<SubstanceSpecificationRelationship>,
pub nucleic_acid: Option<Reference>,
pub polymer: Option<Reference>,
pub protein: Option<Reference>,
pub source_material: Option<Reference>,
}
#[cfg(feature = "specialized")]
impl FhirJson for SubstanceSpecification {
const TYPE_NAME: &'static str = "SubstanceSpecification";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
resource_type(&mut o, d, "SubstanceSpecification");
let r = SubstanceSpecification {
id: o.string(d, "id"),
meta: o.one(d, "meta"),
implicit_rules: o.prim(d, "implicitRules", Kind::Uri),
language: o.prim(d, "language", Kind::Code),
text: o.one(d, "text"),
contained: o.list(d, "contained"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
identifier: o.one(d, "identifier"),
type_: o.one(d, "type"),
status: o.one(d, "status"),
domain: o.one(d, "domain"),
description: o.prim(d, "description", Kind::String),
source: o.list(d, "source"),
comment: o.prim(d, "comment", Kind::String),
moiety: o.list(d, "moiety"),
property: o.list(d, "property"),
reference_information: o.one(d, "referenceInformation"),
structure: o.one(d, "structure"),
code: o.list(d, "code"),
name: o.list(d, "name"),
molecular_weight: o.list(d, "molecularWeight"),
relationship: o.list(d, "relationship"),
nucleic_acid: o.one(d, "nucleicAcid"),
polymer: o.one(d, "polymer"),
protein: o.one(d, "protein"),
source_material: o.one(d, "sourceMaterial"),
};
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.raw(
"resourceType",
Json::String("SubstanceSpecification".into()),
);
w.string("id", &self.id);
w.one("meta", &self.meta);
w.prim("implicitRules", &self.implicit_rules);
w.prim("language", &self.language);
w.one("text", &self.text);
w.list("contained", &self.contained);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.one("identifier", &self.identifier);
w.one("type", &self.type_);
w.one("status", &self.status);
w.one("domain", &self.domain);
w.prim("description", &self.description);
w.list("source", &self.source);
w.prim("comment", &self.comment);
w.list("moiety", &self.moiety);
w.list("property", &self.property);
w.one("referenceInformation", &self.reference_information);
w.one("structure", &self.structure);
w.list("code", &self.code);
w.list("name", &self.name);
w.list("molecularWeight", &self.molecular_weight);
w.list("relationship", &self.relationship);
w.one("nucleicAcid", &self.nucleic_acid);
w.one("polymer", &self.polymer);
w.one("protein", &self.protein);
w.one("sourceMaterial", &self.source_material);
w.finish()
}
}
#[cfg(feature = "specialized")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct SubstanceSpecificationMoiety {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub role: Option<CodeableConcept>,
pub identifier: Option<Identifier>,
pub name: Option<Primitive<String>>,
pub stereochemistry: Option<CodeableConcept>,
pub optical_activity: Option<CodeableConcept>,
pub molecular_formula: Option<Primitive<String>>,
pub amount: Option<SubstanceSpecificationMoietyAmount>,
}
#[cfg(feature = "specialized")]
impl FhirJson for SubstanceSpecificationMoiety {
const TYPE_NAME: &'static str = "SubstanceSpecificationMoiety";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = SubstanceSpecificationMoiety {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
role: o.one(d, "role"),
identifier: o.one(d, "identifier"),
name: o.prim(d, "name", Kind::String),
stereochemistry: o.one(d, "stereochemistry"),
optical_activity: o.one(d, "opticalActivity"),
molecular_formula: o.prim(d, "molecularFormula", Kind::String),
amount: o.choice(d, "amount"),
};
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.string("id", &self.id);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.one("role", &self.role);
w.one("identifier", &self.identifier);
w.prim("name", &self.name);
w.one("stereochemistry", &self.stereochemistry);
w.one("opticalActivity", &self.optical_activity);
w.prim("molecularFormula", &self.molecular_formula);
w.choice("amount", &self.amount);
w.finish()
}
}
#[cfg(feature = "specialized")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct SubstanceSpecificationProperty {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub category: Option<CodeableConcept>,
pub code: Option<CodeableConcept>,
pub parameters: Option<Primitive<String>>,
pub defining_substance: Option<SubstanceSpecificationPropertyDefiningSubstance>,
pub amount: Option<SubstanceSpecificationPropertyAmount>,
}
#[cfg(feature = "specialized")]
impl FhirJson for SubstanceSpecificationProperty {
const TYPE_NAME: &'static str = "SubstanceSpecificationProperty";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = SubstanceSpecificationProperty {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
category: o.one(d, "category"),
code: o.one(d, "code"),
parameters: o.prim(d, "parameters", Kind::String),
defining_substance: o.choice(d, "definingSubstance"),
amount: o.choice(d, "amount"),
};
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.string("id", &self.id);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.one("category", &self.category);
w.one("code", &self.code);
w.prim("parameters", &self.parameters);
w.choice("definingSubstance", &self.defining_substance);
w.choice("amount", &self.amount);
w.finish()
}
}
#[cfg(feature = "specialized")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct SubstanceSpecificationStructure {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub stereochemistry: Option<CodeableConcept>,
pub optical_activity: Option<CodeableConcept>,
pub molecular_formula: Option<Primitive<String>>,
pub molecular_formula_by_moiety: Option<Primitive<String>>,
pub isotope: Vec<SubstanceSpecificationStructureIsotope>,
pub molecular_weight: Option<SubstanceSpecificationStructureIsotopeMolecularWeight>,
pub source: Vec<Reference>,
pub representation: Vec<SubstanceSpecificationStructureRepresentation>,
}
#[cfg(feature = "specialized")]
impl FhirJson for SubstanceSpecificationStructure {
const TYPE_NAME: &'static str = "SubstanceSpecificationStructure";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = SubstanceSpecificationStructure {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
stereochemistry: o.one(d, "stereochemistry"),
optical_activity: o.one(d, "opticalActivity"),
molecular_formula: o.prim(d, "molecularFormula", Kind::String),
molecular_formula_by_moiety: o.prim(d, "molecularFormulaByMoiety", Kind::String),
isotope: o.list(d, "isotope"),
molecular_weight: o.one(d, "molecularWeight"),
source: o.list(d, "source"),
representation: o.list(d, "representation"),
};
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.string("id", &self.id);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.one("stereochemistry", &self.stereochemistry);
w.one("opticalActivity", &self.optical_activity);
w.prim("molecularFormula", &self.molecular_formula);
w.prim(
"molecularFormulaByMoiety",
&self.molecular_formula_by_moiety,
);
w.list("isotope", &self.isotope);
w.one("molecularWeight", &self.molecular_weight);
w.list("source", &self.source);
w.list("representation", &self.representation);
w.finish()
}
}
#[cfg(feature = "specialized")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct SubstanceSpecificationStructureIsotope {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub identifier: Option<Identifier>,
pub name: Option<CodeableConcept>,
pub substitution: Option<CodeableConcept>,
pub half_life: Option<Quantity>,
pub molecular_weight: Option<SubstanceSpecificationStructureIsotopeMolecularWeight>,
}
#[cfg(feature = "specialized")]
impl FhirJson for SubstanceSpecificationStructureIsotope {
const TYPE_NAME: &'static str = "SubstanceSpecificationStructureIsotope";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = SubstanceSpecificationStructureIsotope {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
identifier: o.one(d, "identifier"),
name: o.one(d, "name"),
substitution: o.one(d, "substitution"),
half_life: o.one(d, "halfLife"),
molecular_weight: o.one(d, "molecularWeight"),
};
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.string("id", &self.id);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.one("identifier", &self.identifier);
w.one("name", &self.name);
w.one("substitution", &self.substitution);
w.one("halfLife", &self.half_life);
w.one("molecularWeight", &self.molecular_weight);
w.finish()
}
}
#[cfg(feature = "specialized")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct SubstanceSpecificationStructureIsotopeMolecularWeight {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub method: Option<CodeableConcept>,
pub type_: Option<CodeableConcept>,
pub amount: Option<Quantity>,
}
#[cfg(feature = "specialized")]
impl FhirJson for SubstanceSpecificationStructureIsotopeMolecularWeight {
const TYPE_NAME: &'static str = "SubstanceSpecificationStructureIsotopeMolecularWeight";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = SubstanceSpecificationStructureIsotopeMolecularWeight {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
method: o.one(d, "method"),
type_: o.one(d, "type"),
amount: o.one(d, "amount"),
};
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.string("id", &self.id);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.one("method", &self.method);
w.one("type", &self.type_);
w.one("amount", &self.amount);
w.finish()
}
}
#[cfg(feature = "specialized")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct SubstanceSpecificationStructureRepresentation {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub type_: Option<CodeableConcept>,
pub representation: Option<Primitive<String>>,
pub attachment: Option<Attachment>,
}
#[cfg(feature = "specialized")]
impl FhirJson for SubstanceSpecificationStructureRepresentation {
const TYPE_NAME: &'static str = "SubstanceSpecificationStructureRepresentation";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = SubstanceSpecificationStructureRepresentation {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
type_: o.one(d, "type"),
representation: o.prim(d, "representation", Kind::String),
attachment: o.one(d, "attachment"),
};
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.string("id", &self.id);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.one("type", &self.type_);
w.prim("representation", &self.representation);
w.one("attachment", &self.attachment);
w.finish()
}
}
#[cfg(feature = "specialized")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct SubstanceSpecificationCode {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub code: Option<CodeableConcept>,
pub status: Option<CodeableConcept>,
pub status_date: Option<Primitive<String>>,
pub comment: Option<Primitive<String>>,
pub source: Vec<Reference>,
}
#[cfg(feature = "specialized")]
impl FhirJson for SubstanceSpecificationCode {
const TYPE_NAME: &'static str = "SubstanceSpecificationCode";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = SubstanceSpecificationCode {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
code: o.one(d, "code"),
status: o.one(d, "status"),
status_date: o.prim(d, "statusDate", Kind::DateTime),
comment: o.prim(d, "comment", Kind::String),
source: o.list(d, "source"),
};
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.string("id", &self.id);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.one("code", &self.code);
w.one("status", &self.status);
w.prim("statusDate", &self.status_date);
w.prim("comment", &self.comment);
w.list("source", &self.source);
w.finish()
}
}
#[cfg(feature = "specialized")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct SubstanceSpecificationName {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub name: Option<Primitive<String>>,
pub type_: Option<CodeableConcept>,
pub status: Option<CodeableConcept>,
pub preferred: Option<Primitive<bool>>,
pub language: Vec<CodeableConcept>,
pub domain: Vec<CodeableConcept>,
pub jurisdiction: Vec<CodeableConcept>,
pub synonym: Vec<SubstanceSpecificationName>,
pub translation: Vec<SubstanceSpecificationName>,
pub official: Vec<SubstanceSpecificationNameOfficial>,
pub source: Vec<Reference>,
}
#[cfg(feature = "specialized")]
impl FhirJson for SubstanceSpecificationName {
const TYPE_NAME: &'static str = "SubstanceSpecificationName";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = SubstanceSpecificationName {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
name: o.prim(d, "name", Kind::String),
type_: o.one(d, "type"),
status: o.one(d, "status"),
preferred: o.prim(d, "preferred", Kind::Boolean),
language: o.list(d, "language"),
domain: o.list(d, "domain"),
jurisdiction: o.list(d, "jurisdiction"),
synonym: o.list(d, "synonym"),
translation: o.list(d, "translation"),
official: o.list(d, "official"),
source: o.list(d, "source"),
};
required(d, "name", &r.name);
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.string("id", &self.id);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.prim("name", &self.name);
w.one("type", &self.type_);
w.one("status", &self.status);
w.prim("preferred", &self.preferred);
w.list("language", &self.language);
w.list("domain", &self.domain);
w.list("jurisdiction", &self.jurisdiction);
w.list("synonym", &self.synonym);
w.list("translation", &self.translation);
w.list("official", &self.official);
w.list("source", &self.source);
w.finish()
}
}
#[cfg(feature = "specialized")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct SubstanceSpecificationNameOfficial {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub authority: Option<CodeableConcept>,
pub status: Option<CodeableConcept>,
pub date: Option<Primitive<String>>,
}
#[cfg(feature = "specialized")]
impl FhirJson for SubstanceSpecificationNameOfficial {
const TYPE_NAME: &'static str = "SubstanceSpecificationNameOfficial";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = SubstanceSpecificationNameOfficial {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
authority: o.one(d, "authority"),
status: o.one(d, "status"),
date: o.prim(d, "date", Kind::DateTime),
};
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.string("id", &self.id);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.one("authority", &self.authority);
w.one("status", &self.status);
w.prim("date", &self.date);
w.finish()
}
}
#[cfg(feature = "specialized")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct SubstanceSpecificationRelationship {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub substance: Option<SubstanceSpecificationRelationshipSubstance>,
pub relationship: Option<CodeableConcept>,
pub is_defining: Option<Primitive<bool>>,
pub amount: Option<SubstanceSpecificationRelationshipAmount>,
pub amount_ratio_low_limit: Option<Ratio>,
pub amount_type: Option<CodeableConcept>,
pub source: Vec<Reference>,
}
#[cfg(feature = "specialized")]
impl FhirJson for SubstanceSpecificationRelationship {
const TYPE_NAME: &'static str = "SubstanceSpecificationRelationship";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = SubstanceSpecificationRelationship {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
substance: o.choice(d, "substance"),
relationship: o.one(d, "relationship"),
is_defining: o.prim(d, "isDefining", Kind::Boolean),
amount: o.choice(d, "amount"),
amount_ratio_low_limit: o.one(d, "amountRatioLowLimit"),
amount_type: o.one(d, "amountType"),
source: o.list(d, "source"),
};
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.string("id", &self.id);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.choice("substance", &self.substance);
w.one("relationship", &self.relationship);
w.prim("isDefining", &self.is_defining);
w.choice("amount", &self.amount);
w.one("amountRatioLowLimit", &self.amount_ratio_low_limit);
w.one("amountType", &self.amount_type);
w.list("source", &self.source);
w.finish()
}
}
#[cfg(feature = "specialized")]
#[derive(Debug, Clone, PartialEq)]
pub enum SubstanceSpecificationMoietyAmount {
Quantity(Quantity),
String(Primitive<String>),
}
#[cfg(feature = "specialized")]
impl Choice for SubstanceSpecificationMoietyAmount {
const TYPES: &'static [&'static str] = &["Quantity", "string"];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"Quantity" => o.one(d, key).map(Self::Quantity),
"string" => o.prim(d, key, Kind::String).map(Self::String),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::Quantity(v) => w.value(&choice_key(base, "Quantity"), v),
Self::String(v) => w.prim_value(&choice_key(base, "string"), v),
}
}
}
#[cfg(feature = "specialized")]
#[derive(Debug, Clone, PartialEq)]
pub enum SubstanceSpecificationPropertyDefiningSubstance {
Reference(Reference),
CodeableConcept(CodeableConcept),
}
#[cfg(feature = "specialized")]
impl Choice for SubstanceSpecificationPropertyDefiningSubstance {
const TYPES: &'static [&'static str] = &["Reference", "CodeableConcept"];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"Reference" => o.one(d, key).map(Self::Reference),
"CodeableConcept" => o.one(d, key).map(Self::CodeableConcept),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::Reference(v) => w.value(&choice_key(base, "Reference"), v),
Self::CodeableConcept(v) => w.value(&choice_key(base, "CodeableConcept"), v),
}
}
}
#[cfg(feature = "specialized")]
#[derive(Debug, Clone, PartialEq)]
pub enum SubstanceSpecificationPropertyAmount {
Quantity(Quantity),
String(Primitive<String>),
}
#[cfg(feature = "specialized")]
impl Choice for SubstanceSpecificationPropertyAmount {
const TYPES: &'static [&'static str] = &["Quantity", "string"];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"Quantity" => o.one(d, key).map(Self::Quantity),
"string" => o.prim(d, key, Kind::String).map(Self::String),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::Quantity(v) => w.value(&choice_key(base, "Quantity"), v),
Self::String(v) => w.prim_value(&choice_key(base, "string"), v),
}
}
}
#[cfg(feature = "specialized")]
#[derive(Debug, Clone, PartialEq)]
pub enum SubstanceSpecificationRelationshipSubstance {
Reference(Reference),
CodeableConcept(CodeableConcept),
}
#[cfg(feature = "specialized")]
impl Choice for SubstanceSpecificationRelationshipSubstance {
const TYPES: &'static [&'static str] = &["Reference", "CodeableConcept"];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"Reference" => o.one(d, key).map(Self::Reference),
"CodeableConcept" => o.one(d, key).map(Self::CodeableConcept),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::Reference(v) => w.value(&choice_key(base, "Reference"), v),
Self::CodeableConcept(v) => w.value(&choice_key(base, "CodeableConcept"), v),
}
}
}
#[cfg(feature = "specialized")]
#[derive(Debug, Clone, PartialEq)]
pub enum SubstanceSpecificationRelationshipAmount {
Quantity(Quantity),
Range(Range),
Ratio(Ratio),
String(Primitive<String>),
}
#[cfg(feature = "specialized")]
impl Choice for SubstanceSpecificationRelationshipAmount {
const TYPES: &'static [&'static str] = &["Quantity", "Range", "Ratio", "string"];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"Quantity" => o.one(d, key).map(Self::Quantity),
"Range" => o.one(d, key).map(Self::Range),
"Ratio" => o.one(d, key).map(Self::Ratio),
"string" => o.prim(d, key, Kind::String).map(Self::String),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::Quantity(v) => w.value(&choice_key(base, "Quantity"), v),
Self::Range(v) => w.value(&choice_key(base, "Range"), v),
Self::Ratio(v) => w.value(&choice_key(base, "Ratio"), v),
Self::String(v) => w.prim_value(&choice_key(base, "string"), v),
}
}
}