#![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 SubstancePolymer {
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 class: Option<CodeableConcept>,
pub geometry: Option<CodeableConcept>,
pub copolymer_connectivity: Vec<CodeableConcept>,
pub modification: Vec<Primitive<String>>,
pub monomer_set: Vec<SubstancePolymerMonomerSet>,
pub repeat: Vec<SubstancePolymerRepeat>,
}
#[cfg(feature = "specialized")]
impl FhirJson for SubstancePolymer {
const TYPE_NAME: &'static str = "SubstancePolymer";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
resource_type(&mut o, d, "SubstancePolymer");
let r = SubstancePolymer {
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"),
class: o.one(d, "class"),
geometry: o.one(d, "geometry"),
copolymer_connectivity: o.list(d, "copolymerConnectivity"),
modification: o.prim_list(d, "modification", Kind::String),
monomer_set: o.list(d, "monomerSet"),
repeat: o.list(d, "repeat"),
};
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.raw("resourceType", Json::String("SubstancePolymer".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("class", &self.class);
w.one("geometry", &self.geometry);
w.list("copolymerConnectivity", &self.copolymer_connectivity);
w.prim_list("modification", &self.modification);
w.list("monomerSet", &self.monomer_set);
w.list("repeat", &self.repeat);
w.finish()
}
}
#[cfg(feature = "specialized")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct SubstancePolymerMonomerSet {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub ratio_type: Option<CodeableConcept>,
pub starting_material: Vec<SubstancePolymerMonomerSetStartingMaterial>,
}
#[cfg(feature = "specialized")]
impl FhirJson for SubstancePolymerMonomerSet {
const TYPE_NAME: &'static str = "SubstancePolymerMonomerSet";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = SubstancePolymerMonomerSet {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
ratio_type: o.one(d, "ratioType"),
starting_material: o.list(d, "startingMaterial"),
};
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("ratioType", &self.ratio_type);
w.list("startingMaterial", &self.starting_material);
w.finish()
}
}
#[cfg(feature = "specialized")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct SubstancePolymerMonomerSetStartingMaterial {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub material: Option<CodeableConcept>,
pub type_: Option<CodeableConcept>,
pub is_defining: Option<Primitive<bool>>,
pub amount: Option<SubstanceAmount>,
}
#[cfg(feature = "specialized")]
impl FhirJson for SubstancePolymerMonomerSetStartingMaterial {
const TYPE_NAME: &'static str = "SubstancePolymerMonomerSetStartingMaterial";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = SubstancePolymerMonomerSetStartingMaterial {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
material: o.one(d, "material"),
type_: o.one(d, "type"),
is_defining: o.prim(d, "isDefining", Kind::Boolean),
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("material", &self.material);
w.one("type", &self.type_);
w.prim("isDefining", &self.is_defining);
w.one("amount", &self.amount);
w.finish()
}
}
#[cfg(feature = "specialized")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct SubstancePolymerRepeat {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub number_of_units: Option<Primitive<i32>>,
pub average_molecular_formula: Option<Primitive<String>>,
pub repeat_unit_amount_type: Option<CodeableConcept>,
pub repeat_unit: Vec<SubstancePolymerRepeatRepeatUnit>,
}
#[cfg(feature = "specialized")]
impl FhirJson for SubstancePolymerRepeat {
const TYPE_NAME: &'static str = "SubstancePolymerRepeat";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = SubstancePolymerRepeat {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
number_of_units: o.prim(d, "numberOfUnits", Kind::Integer),
average_molecular_formula: o.prim(d, "averageMolecularFormula", Kind::String),
repeat_unit_amount_type: o.one(d, "repeatUnitAmountType"),
repeat_unit: o.list(d, "repeatUnit"),
};
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("numberOfUnits", &self.number_of_units);
w.prim("averageMolecularFormula", &self.average_molecular_formula);
w.one("repeatUnitAmountType", &self.repeat_unit_amount_type);
w.list("repeatUnit", &self.repeat_unit);
w.finish()
}
}
#[cfg(feature = "specialized")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct SubstancePolymerRepeatRepeatUnit {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub orientation_of_polymerisation: Option<CodeableConcept>,
pub repeat_unit: Option<Primitive<String>>,
pub amount: Option<SubstanceAmount>,
pub degree_of_polymerisation: Vec<SubstancePolymerRepeatRepeatUnitDegreeOfPolymerisation>,
pub structural_representation: Vec<SubstancePolymerRepeatRepeatUnitStructuralRepresentation>,
}
#[cfg(feature = "specialized")]
impl FhirJson for SubstancePolymerRepeatRepeatUnit {
const TYPE_NAME: &'static str = "SubstancePolymerRepeatRepeatUnit";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = SubstancePolymerRepeatRepeatUnit {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
orientation_of_polymerisation: o.one(d, "orientationOfPolymerisation"),
repeat_unit: o.prim(d, "repeatUnit", Kind::String),
amount: o.one(d, "amount"),
degree_of_polymerisation: o.list(d, "degreeOfPolymerisation"),
structural_representation: o.list(d, "structuralRepresentation"),
};
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(
"orientationOfPolymerisation",
&self.orientation_of_polymerisation,
);
w.prim("repeatUnit", &self.repeat_unit);
w.one("amount", &self.amount);
w.list("degreeOfPolymerisation", &self.degree_of_polymerisation);
w.list("structuralRepresentation", &self.structural_representation);
w.finish()
}
}
#[cfg(feature = "specialized")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct SubstancePolymerRepeatRepeatUnitDegreeOfPolymerisation {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub degree: Option<CodeableConcept>,
pub amount: Option<SubstanceAmount>,
}
#[cfg(feature = "specialized")]
impl FhirJson for SubstancePolymerRepeatRepeatUnitDegreeOfPolymerisation {
const TYPE_NAME: &'static str = "SubstancePolymerRepeatRepeatUnitDegreeOfPolymerisation";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = SubstancePolymerRepeatRepeatUnitDegreeOfPolymerisation {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
degree: o.one(d, "degree"),
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("degree", &self.degree);
w.one("amount", &self.amount);
w.finish()
}
}
#[cfg(feature = "specialized")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct SubstancePolymerRepeatRepeatUnitStructuralRepresentation {
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 SubstancePolymerRepeatRepeatUnitStructuralRepresentation {
const TYPE_NAME: &'static str = "SubstancePolymerRepeatRepeatUnitStructuralRepresentation";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = SubstancePolymerRepeatRepeatUnitStructuralRepresentation {
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()
}
}