#![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 MedicinalProductPharmaceutical {
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: Vec<Identifier>,
pub administrable_dose_form: Option<CodeableConcept>,
pub unit_of_presentation: Option<CodeableConcept>,
pub ingredient: Vec<Reference>,
pub device: Vec<Reference>,
pub characteristics: Vec<MedicinalProductPharmaceuticalCharacteristics>,
pub route_of_administration: Vec<MedicinalProductPharmaceuticalRouteOfAdministration>,
}
#[cfg(feature = "specialized")]
impl FhirJson for MedicinalProductPharmaceutical {
const TYPE_NAME: &'static str = "MedicinalProductPharmaceutical";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
resource_type(&mut o, d, "MedicinalProductPharmaceutical");
let r = MedicinalProductPharmaceutical {
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.list(d, "identifier"),
administrable_dose_form: o.one(d, "administrableDoseForm"),
unit_of_presentation: o.one(d, "unitOfPresentation"),
ingredient: o.list(d, "ingredient"),
device: o.list(d, "device"),
characteristics: o.list(d, "characteristics"),
route_of_administration: o.list(d, "routeOfAdministration"),
};
required(d, "administrableDoseForm", &r.administrable_dose_form);
required_list(d, "routeOfAdministration", &r.route_of_administration, 1);
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.raw(
"resourceType",
Json::String("MedicinalProductPharmaceutical".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.list("identifier", &self.identifier);
w.one("administrableDoseForm", &self.administrable_dose_form);
w.one("unitOfPresentation", &self.unit_of_presentation);
w.list("ingredient", &self.ingredient);
w.list("device", &self.device);
w.list("characteristics", &self.characteristics);
w.list("routeOfAdministration", &self.route_of_administration);
w.finish()
}
}
#[cfg(feature = "specialized")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct MedicinalProductPharmaceuticalCharacteristics {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub code: Option<CodeableConcept>,
pub status: Option<CodeableConcept>,
}
#[cfg(feature = "specialized")]
impl FhirJson for MedicinalProductPharmaceuticalCharacteristics {
const TYPE_NAME: &'static str = "MedicinalProductPharmaceuticalCharacteristics";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = MedicinalProductPharmaceuticalCharacteristics {
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"),
};
required(d, "code", &r.code);
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.finish()
}
}
#[cfg(feature = "specialized")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct MedicinalProductPharmaceuticalRouteOfAdministration {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub code: Option<CodeableConcept>,
pub first_dose: Option<Quantity>,
pub max_single_dose: Option<Quantity>,
pub max_dose_per_day: Option<Quantity>,
pub max_dose_per_treatment_period: Option<Ratio>,
pub max_treatment_period: Option<Duration>,
pub target_species: Vec<MedicinalProductPharmaceuticalRouteOfAdministrationTargetSpecies>,
}
#[cfg(feature = "specialized")]
impl FhirJson for MedicinalProductPharmaceuticalRouteOfAdministration {
const TYPE_NAME: &'static str = "MedicinalProductPharmaceuticalRouteOfAdministration";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = MedicinalProductPharmaceuticalRouteOfAdministration {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
code: o.one(d, "code"),
first_dose: o.one(d, "firstDose"),
max_single_dose: o.one(d, "maxSingleDose"),
max_dose_per_day: o.one(d, "maxDosePerDay"),
max_dose_per_treatment_period: o.one(d, "maxDosePerTreatmentPeriod"),
max_treatment_period: o.one(d, "maxTreatmentPeriod"),
target_species: o.list(d, "targetSpecies"),
};
required(d, "code", &r.code);
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("firstDose", &self.first_dose);
w.one("maxSingleDose", &self.max_single_dose);
w.one("maxDosePerDay", &self.max_dose_per_day);
w.one(
"maxDosePerTreatmentPeriod",
&self.max_dose_per_treatment_period,
);
w.one("maxTreatmentPeriod", &self.max_treatment_period);
w.list("targetSpecies", &self.target_species);
w.finish()
}
}
#[cfg(feature = "specialized")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct MedicinalProductPharmaceuticalRouteOfAdministrationTargetSpecies {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub code: Option<CodeableConcept>,
pub withdrawal_period:
Vec<MedicinalProductPharmaceuticalRouteOfAdministrationTargetSpeciesWithdrawalPeriod>,
}
#[cfg(feature = "specialized")]
impl FhirJson for MedicinalProductPharmaceuticalRouteOfAdministrationTargetSpecies {
const TYPE_NAME: &'static str =
"MedicinalProductPharmaceuticalRouteOfAdministrationTargetSpecies";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = MedicinalProductPharmaceuticalRouteOfAdministrationTargetSpecies {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
code: o.one(d, "code"),
withdrawal_period: o.list(d, "withdrawalPeriod"),
};
required(d, "code", &r.code);
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.list("withdrawalPeriod", &self.withdrawal_period);
w.finish()
}
}
#[cfg(feature = "specialized")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct MedicinalProductPharmaceuticalRouteOfAdministrationTargetSpeciesWithdrawalPeriod {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub tissue: Option<CodeableConcept>,
pub value: Option<Quantity>,
pub supporting_information: Option<Primitive<String>>,
}
#[cfg(feature = "specialized")]
impl FhirJson for MedicinalProductPharmaceuticalRouteOfAdministrationTargetSpeciesWithdrawalPeriod {
const TYPE_NAME: &'static str =
"MedicinalProductPharmaceuticalRouteOfAdministrationTargetSpeciesWithdrawalPeriod";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = MedicinalProductPharmaceuticalRouteOfAdministrationTargetSpeciesWithdrawalPeriod {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
tissue: o.one(d, "tissue"),
value: o.one(d, "value"),
supporting_information: o.prim(d, "supportingInformation", Kind::String),
};
required(d, "tissue", &r.tissue);
required(d, "value", &r.value);
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("tissue", &self.tissue);
w.one("value", &self.value);
w.prim("supportingInformation", &self.supporting_information);
w.finish()
}
}