#![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 = "clinical")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct MedicationKnowledge {
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 code: Option<CodeableConcept>,
pub status: Option<Primitive<String>>,
pub manufacturer: Option<Reference>,
pub dose_form: Option<CodeableConcept>,
pub amount: Option<Quantity>,
pub synonym: Vec<Primitive<String>>,
pub related_medication_knowledge: Vec<MedicationKnowledgeRelatedMedicationKnowledge>,
pub associated_medication: Vec<Reference>,
pub product_type: Vec<CodeableConcept>,
pub monograph: Vec<MedicationKnowledgeMonograph>,
pub ingredient: Vec<MedicationKnowledgeIngredient>,
pub preparation_instruction: Option<Primitive<String>>,
pub intended_route: Vec<CodeableConcept>,
pub cost: Vec<MedicationKnowledgeCost>,
pub monitoring_program: Vec<MedicationKnowledgeMonitoringProgram>,
pub administration_guidelines: Vec<MedicationKnowledgeAdministrationGuidelines>,
pub medicine_classification: Vec<MedicationKnowledgeMedicineClassification>,
pub packaging: Option<MedicationKnowledgePackaging>,
pub drug_characteristic: Vec<MedicationKnowledgeDrugCharacteristic>,
pub contraindication: Vec<Reference>,
pub regulatory: Vec<MedicationKnowledgeRegulatory>,
pub kinetics: Vec<MedicationKnowledgeKinetics>,
}
#[cfg(feature = "clinical")]
impl FhirJson for MedicationKnowledge {
const TYPE_NAME: &'static str = "MedicationKnowledge";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
resource_type(&mut o, d, "MedicationKnowledge");
let r = MedicationKnowledge {
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"),
code: o.one(d, "code"),
status: o.prim(d, "status", Kind::Code),
manufacturer: o.one(d, "manufacturer"),
dose_form: o.one(d, "doseForm"),
amount: o.one(d, "amount"),
synonym: o.prim_list(d, "synonym", Kind::String),
related_medication_knowledge: o.list(d, "relatedMedicationKnowledge"),
associated_medication: o.list(d, "associatedMedication"),
product_type: o.list(d, "productType"),
monograph: o.list(d, "monograph"),
ingredient: o.list(d, "ingredient"),
preparation_instruction: o.prim(d, "preparationInstruction", Kind::Markdown),
intended_route: o.list(d, "intendedRoute"),
cost: o.list(d, "cost"),
monitoring_program: o.list(d, "monitoringProgram"),
administration_guidelines: o.list(d, "administrationGuidelines"),
medicine_classification: o.list(d, "medicineClassification"),
packaging: o.one(d, "packaging"),
drug_characteristic: o.list(d, "drugCharacteristic"),
contraindication: o.list(d, "contraindication"),
regulatory: o.list(d, "regulatory"),
kinetics: o.list(d, "kinetics"),
};
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.raw("resourceType", Json::String("MedicationKnowledge".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("code", &self.code);
w.prim("status", &self.status);
w.one("manufacturer", &self.manufacturer);
w.one("doseForm", &self.dose_form);
w.one("amount", &self.amount);
w.prim_list("synonym", &self.synonym);
w.list(
"relatedMedicationKnowledge",
&self.related_medication_knowledge,
);
w.list("associatedMedication", &self.associated_medication);
w.list("productType", &self.product_type);
w.list("monograph", &self.monograph);
w.list("ingredient", &self.ingredient);
w.prim("preparationInstruction", &self.preparation_instruction);
w.list("intendedRoute", &self.intended_route);
w.list("cost", &self.cost);
w.list("monitoringProgram", &self.monitoring_program);
w.list("administrationGuidelines", &self.administration_guidelines);
w.list("medicineClassification", &self.medicine_classification);
w.one("packaging", &self.packaging);
w.list("drugCharacteristic", &self.drug_characteristic);
w.list("contraindication", &self.contraindication);
w.list("regulatory", &self.regulatory);
w.list("kinetics", &self.kinetics);
w.finish()
}
}
#[cfg(feature = "clinical")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct MedicationKnowledgeRelatedMedicationKnowledge {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub type_: Option<CodeableConcept>,
pub reference: Vec<Reference>,
}
#[cfg(feature = "clinical")]
impl FhirJson for MedicationKnowledgeRelatedMedicationKnowledge {
const TYPE_NAME: &'static str = "MedicationKnowledgeRelatedMedicationKnowledge";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = MedicationKnowledgeRelatedMedicationKnowledge {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
type_: o.one(d, "type"),
reference: o.list(d, "reference"),
};
required(d, "type", &r.type_);
required_list(d, "reference", &r.reference, 1);
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.list("reference", &self.reference);
w.finish()
}
}
#[cfg(feature = "clinical")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct MedicationKnowledgeMonograph {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub type_: Option<CodeableConcept>,
pub source: Option<Reference>,
}
#[cfg(feature = "clinical")]
impl FhirJson for MedicationKnowledgeMonograph {
const TYPE_NAME: &'static str = "MedicationKnowledgeMonograph";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = MedicationKnowledgeMonograph {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
type_: o.one(d, "type"),
source: o.one(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("type", &self.type_);
w.one("source", &self.source);
w.finish()
}
}
#[cfg(feature = "clinical")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct MedicationKnowledgeIngredient {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub item: Option<MedicationKnowledgeIngredientItem>,
pub is_active: Option<Primitive<bool>>,
pub strength: Option<Ratio>,
}
#[cfg(feature = "clinical")]
impl FhirJson for MedicationKnowledgeIngredient {
const TYPE_NAME: &'static str = "MedicationKnowledgeIngredient";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = MedicationKnowledgeIngredient {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
item: o.choice(d, "item"),
is_active: o.prim(d, "isActive", Kind::Boolean),
strength: o.one(d, "strength"),
};
required(d, "item[x]", &r.item);
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("item", &self.item);
w.prim("isActive", &self.is_active);
w.one("strength", &self.strength);
w.finish()
}
}
#[cfg(feature = "clinical")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct MedicationKnowledgeCost {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub type_: Option<CodeableConcept>,
pub source: Option<Primitive<String>>,
pub cost: Option<Money>,
}
#[cfg(feature = "clinical")]
impl FhirJson for MedicationKnowledgeCost {
const TYPE_NAME: &'static str = "MedicationKnowledgeCost";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = MedicationKnowledgeCost {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
type_: o.one(d, "type"),
source: o.prim(d, "source", Kind::String),
cost: o.one(d, "cost"),
};
required(d, "type", &r.type_);
required(d, "cost", &r.cost);
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("source", &self.source);
w.one("cost", &self.cost);
w.finish()
}
}
#[cfg(feature = "clinical")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct MedicationKnowledgeMonitoringProgram {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub type_: Option<CodeableConcept>,
pub name: Option<Primitive<String>>,
}
#[cfg(feature = "clinical")]
impl FhirJson for MedicationKnowledgeMonitoringProgram {
const TYPE_NAME: &'static str = "MedicationKnowledgeMonitoringProgram";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = MedicationKnowledgeMonitoringProgram {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
type_: o.one(d, "type"),
name: o.prim(d, "name", Kind::String),
};
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("name", &self.name);
w.finish()
}
}
#[cfg(feature = "clinical")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct MedicationKnowledgeAdministrationGuidelines {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub dosage: Vec<MedicationKnowledgeAdministrationGuidelinesDosage>,
pub indication: Option<MedicationKnowledgeAdministrationGuidelinesIndication>,
pub patient_characteristics:
Vec<MedicationKnowledgeAdministrationGuidelinesPatientCharacteristics>,
}
#[cfg(feature = "clinical")]
impl FhirJson for MedicationKnowledgeAdministrationGuidelines {
const TYPE_NAME: &'static str = "MedicationKnowledgeAdministrationGuidelines";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = MedicationKnowledgeAdministrationGuidelines {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
dosage: o.list(d, "dosage"),
indication: o.choice(d, "indication"),
patient_characteristics: o.list(d, "patientCharacteristics"),
};
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.list("dosage", &self.dosage);
w.choice("indication", &self.indication);
w.list("patientCharacteristics", &self.patient_characteristics);
w.finish()
}
}
#[cfg(feature = "clinical")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct MedicationKnowledgeAdministrationGuidelinesDosage {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub type_: Option<CodeableConcept>,
pub dosage: Vec<Dosage>,
}
#[cfg(feature = "clinical")]
impl FhirJson for MedicationKnowledgeAdministrationGuidelinesDosage {
const TYPE_NAME: &'static str = "MedicationKnowledgeAdministrationGuidelinesDosage";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = MedicationKnowledgeAdministrationGuidelinesDosage {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
type_: o.one(d, "type"),
dosage: o.list(d, "dosage"),
};
required(d, "type", &r.type_);
required_list(d, "dosage", &r.dosage, 1);
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.list("dosage", &self.dosage);
w.finish()
}
}
#[cfg(feature = "clinical")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct MedicationKnowledgeAdministrationGuidelinesPatientCharacteristics {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub characteristic:
Option<MedicationKnowledgeAdministrationGuidelinesPatientCharacteristicsCharacteristic>,
pub value: Vec<Primitive<String>>,
}
#[cfg(feature = "clinical")]
impl FhirJson for MedicationKnowledgeAdministrationGuidelinesPatientCharacteristics {
const TYPE_NAME: &'static str =
"MedicationKnowledgeAdministrationGuidelinesPatientCharacteristics";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = MedicationKnowledgeAdministrationGuidelinesPatientCharacteristics {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
characteristic: o.choice(d, "characteristic"),
value: o.prim_list(d, "value", Kind::String),
};
required(d, "characteristic[x]", &r.characteristic);
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("characteristic", &self.characteristic);
w.prim_list("value", &self.value);
w.finish()
}
}
#[cfg(feature = "clinical")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct MedicationKnowledgeMedicineClassification {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub type_: Option<CodeableConcept>,
pub classification: Vec<CodeableConcept>,
}
#[cfg(feature = "clinical")]
impl FhirJson for MedicationKnowledgeMedicineClassification {
const TYPE_NAME: &'static str = "MedicationKnowledgeMedicineClassification";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = MedicationKnowledgeMedicineClassification {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
type_: o.one(d, "type"),
classification: o.list(d, "classification"),
};
required(d, "type", &r.type_);
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.list("classification", &self.classification);
w.finish()
}
}
#[cfg(feature = "clinical")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct MedicationKnowledgePackaging {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub type_: Option<CodeableConcept>,
pub quantity: Option<Quantity>,
}
#[cfg(feature = "clinical")]
impl FhirJson for MedicationKnowledgePackaging {
const TYPE_NAME: &'static str = "MedicationKnowledgePackaging";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = MedicationKnowledgePackaging {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
type_: o.one(d, "type"),
quantity: o.one(d, "quantity"),
};
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.one("quantity", &self.quantity);
w.finish()
}
}
#[cfg(feature = "clinical")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct MedicationKnowledgeDrugCharacteristic {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub type_: Option<CodeableConcept>,
pub value: Option<MedicationKnowledgeDrugCharacteristicValue>,
}
#[cfg(feature = "clinical")]
impl FhirJson for MedicationKnowledgeDrugCharacteristic {
const TYPE_NAME: &'static str = "MedicationKnowledgeDrugCharacteristic";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = MedicationKnowledgeDrugCharacteristic {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
type_: o.one(d, "type"),
value: o.choice(d, "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("type", &self.type_);
w.choice("value", &self.value);
w.finish()
}
}
#[cfg(feature = "clinical")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct MedicationKnowledgeRegulatory {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub regulatory_authority: Option<Reference>,
pub substitution: Vec<MedicationKnowledgeRegulatorySubstitution>,
pub schedule: Vec<MedicationKnowledgeRegulatorySchedule>,
pub max_dispense: Option<MedicationKnowledgeRegulatoryMaxDispense>,
}
#[cfg(feature = "clinical")]
impl FhirJson for MedicationKnowledgeRegulatory {
const TYPE_NAME: &'static str = "MedicationKnowledgeRegulatory";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = MedicationKnowledgeRegulatory {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
regulatory_authority: o.one(d, "regulatoryAuthority"),
substitution: o.list(d, "substitution"),
schedule: o.list(d, "schedule"),
max_dispense: o.one(d, "maxDispense"),
};
required(d, "regulatoryAuthority", &r.regulatory_authority);
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("regulatoryAuthority", &self.regulatory_authority);
w.list("substitution", &self.substitution);
w.list("schedule", &self.schedule);
w.one("maxDispense", &self.max_dispense);
w.finish()
}
}
#[cfg(feature = "clinical")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct MedicationKnowledgeRegulatorySubstitution {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub type_: Option<CodeableConcept>,
pub allowed: Option<Primitive<bool>>,
}
#[cfg(feature = "clinical")]
impl FhirJson for MedicationKnowledgeRegulatorySubstitution {
const TYPE_NAME: &'static str = "MedicationKnowledgeRegulatorySubstitution";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = MedicationKnowledgeRegulatorySubstitution {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
type_: o.one(d, "type"),
allowed: o.prim(d, "allowed", Kind::Boolean),
};
required(d, "type", &r.type_);
required(d, "allowed", &r.allowed);
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("allowed", &self.allowed);
w.finish()
}
}
#[cfg(feature = "clinical")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct MedicationKnowledgeRegulatorySchedule {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub schedule: Option<CodeableConcept>,
}
#[cfg(feature = "clinical")]
impl FhirJson for MedicationKnowledgeRegulatorySchedule {
const TYPE_NAME: &'static str = "MedicationKnowledgeRegulatorySchedule";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = MedicationKnowledgeRegulatorySchedule {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
schedule: o.one(d, "schedule"),
};
required(d, "schedule", &r.schedule);
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("schedule", &self.schedule);
w.finish()
}
}
#[cfg(feature = "clinical")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct MedicationKnowledgeRegulatoryMaxDispense {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub quantity: Option<Quantity>,
pub period: Option<Duration>,
}
#[cfg(feature = "clinical")]
impl FhirJson for MedicationKnowledgeRegulatoryMaxDispense {
const TYPE_NAME: &'static str = "MedicationKnowledgeRegulatoryMaxDispense";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = MedicationKnowledgeRegulatoryMaxDispense {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
quantity: o.one(d, "quantity"),
period: o.one(d, "period"),
};
required(d, "quantity", &r.quantity);
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("quantity", &self.quantity);
w.one("period", &self.period);
w.finish()
}
}
#[cfg(feature = "clinical")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct MedicationKnowledgeKinetics {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub area_under_curve: Vec<Quantity>,
pub lethal_dose50: Vec<Quantity>,
pub half_life_period: Option<Duration>,
}
#[cfg(feature = "clinical")]
impl FhirJson for MedicationKnowledgeKinetics {
const TYPE_NAME: &'static str = "MedicationKnowledgeKinetics";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = MedicationKnowledgeKinetics {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
area_under_curve: o.list(d, "areaUnderCurve"),
lethal_dose50: o.list(d, "lethalDose50"),
half_life_period: o.one(d, "halfLifePeriod"),
};
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.list("areaUnderCurve", &self.area_under_curve);
w.list("lethalDose50", &self.lethal_dose50);
w.one("halfLifePeriod", &self.half_life_period);
w.finish()
}
}
#[cfg(feature = "clinical")]
#[derive(Debug, Clone, PartialEq)]
pub enum MedicationKnowledgeIngredientItem {
CodeableConcept(CodeableConcept),
Reference(Reference),
}
#[cfg(feature = "clinical")]
impl Choice for MedicationKnowledgeIngredientItem {
const TYPES: &'static [&'static str] = &["CodeableConcept", "Reference"];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"CodeableConcept" => o.one(d, key).map(Self::CodeableConcept),
"Reference" => o.one(d, key).map(Self::Reference),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::CodeableConcept(v) => w.value(&choice_key(base, "CodeableConcept"), v),
Self::Reference(v) => w.value(&choice_key(base, "Reference"), v),
}
}
}
#[cfg(feature = "clinical")]
#[derive(Debug, Clone, PartialEq)]
pub enum MedicationKnowledgeAdministrationGuidelinesIndication {
CodeableConcept(CodeableConcept),
Reference(Reference),
}
#[cfg(feature = "clinical")]
impl Choice for MedicationKnowledgeAdministrationGuidelinesIndication {
const TYPES: &'static [&'static str] = &["CodeableConcept", "Reference"];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"CodeableConcept" => o.one(d, key).map(Self::CodeableConcept),
"Reference" => o.one(d, key).map(Self::Reference),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::CodeableConcept(v) => w.value(&choice_key(base, "CodeableConcept"), v),
Self::Reference(v) => w.value(&choice_key(base, "Reference"), v),
}
}
}
#[cfg(feature = "clinical")]
#[derive(Debug, Clone, PartialEq)]
pub enum MedicationKnowledgeAdministrationGuidelinesPatientCharacteristicsCharacteristic {
CodeableConcept(CodeableConcept),
Quantity(Quantity),
}
#[cfg(feature = "clinical")]
impl Choice for MedicationKnowledgeAdministrationGuidelinesPatientCharacteristicsCharacteristic {
const TYPES: &'static [&'static str] = &["CodeableConcept", "Quantity"];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"CodeableConcept" => o.one(d, key).map(Self::CodeableConcept),
"Quantity" => o.one(d, key).map(Self::Quantity),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::CodeableConcept(v) => w.value(&choice_key(base, "CodeableConcept"), v),
Self::Quantity(v) => w.value(&choice_key(base, "Quantity"), v),
}
}
}
#[cfg(feature = "clinical")]
#[derive(Debug, Clone, PartialEq)]
pub enum MedicationKnowledgeDrugCharacteristicValue {
CodeableConcept(CodeableConcept),
String(Primitive<String>),
Quantity(Quantity),
Base64Binary(Primitive<String>),
}
#[cfg(feature = "clinical")]
impl Choice for MedicationKnowledgeDrugCharacteristicValue {
const TYPES: &'static [&'static str] =
&["CodeableConcept", "string", "Quantity", "base64Binary"];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"CodeableConcept" => o.one(d, key).map(Self::CodeableConcept),
"string" => o.prim(d, key, Kind::String).map(Self::String),
"Quantity" => o.one(d, key).map(Self::Quantity),
"base64Binary" => o.prim(d, key, Kind::Base64Binary).map(Self::Base64Binary),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::CodeableConcept(v) => w.value(&choice_key(base, "CodeableConcept"), v),
Self::String(v) => w.prim_value(&choice_key(base, "string"), v),
Self::Quantity(v) => w.value(&choice_key(base, "Quantity"), v),
Self::Base64Binary(v) => w.prim_value(&choice_key(base, "base64Binary"), v),
}
}
}