#![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::*;
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Address {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub use_: Option<Primitive<String>>,
pub type_: Option<Primitive<String>>,
pub text: Option<Primitive<String>>,
pub line: Vec<Primitive<String>>,
pub city: Option<Primitive<String>>,
pub district: Option<Primitive<String>>,
pub state: Option<Primitive<String>>,
pub postal_code: Option<Primitive<String>>,
pub country: Option<Primitive<String>>,
pub period: Option<Period>,
}
impl FhirJson for Address {
const TYPE_NAME: &'static str = "Address";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = Address {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
use_: o.prim(d, "use", Kind::Code),
type_: o.prim(d, "type", Kind::Code),
text: o.prim(d, "text", Kind::String),
line: o.prim_list(d, "line", Kind::String),
city: o.prim(d, "city", Kind::String),
district: o.prim(d, "district", Kind::String),
state: o.prim(d, "state", Kind::String),
postal_code: o.prim(d, "postalCode", Kind::String),
country: o.prim(d, "country", Kind::String),
period: o.one(d, "period"),
};
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.prim("use", &self.use_);
w.prim("type", &self.type_);
w.prim("text", &self.text);
w.prim_list("line", &self.line);
w.prim("city", &self.city);
w.prim("district", &self.district);
w.prim("state", &self.state);
w.prim("postalCode", &self.postal_code);
w.prim("country", &self.country);
w.one("period", &self.period);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Age {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub value: Option<Primitive<Decimal>>,
pub comparator: Option<Primitive<String>>,
pub unit: Option<Primitive<String>>,
pub system: Option<Primitive<String>>,
pub code: Option<Primitive<String>>,
}
impl FhirJson for Age {
const TYPE_NAME: &'static str = "Age";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = Age {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
value: o.prim(d, "value", Kind::Decimal),
comparator: o.prim(d, "comparator", Kind::Code),
unit: o.prim(d, "unit", Kind::String),
system: o.prim(d, "system", Kind::Uri),
code: o.prim(d, "code", Kind::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.prim("value", &self.value);
w.prim("comparator", &self.comparator);
w.prim("unit", &self.unit);
w.prim("system", &self.system);
w.prim("code", &self.code);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Annotation {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub author: Option<AnnotationAuthor>,
pub time: Option<Primitive<String>>,
pub text: Option<Primitive<String>>,
}
impl FhirJson for Annotation {
const TYPE_NAME: &'static str = "Annotation";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = Annotation {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
author: o.choice(d, "author"),
time: o.prim(d, "time", Kind::DateTime),
text: o.prim(d, "text", Kind::Markdown),
};
required(d, "text", &r.text);
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.choice("author", &self.author);
w.prim("time", &self.time);
w.prim("text", &self.text);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Attachment {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub content_type: Option<Primitive<String>>,
pub language: Option<Primitive<String>>,
pub data: Option<Primitive<String>>,
pub url: Option<Primitive<String>>,
pub size: Option<Primitive<i32>>,
pub hash: Option<Primitive<String>>,
pub title: Option<Primitive<String>>,
pub creation: Option<Primitive<String>>,
}
impl FhirJson for Attachment {
const TYPE_NAME: &'static str = "Attachment";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = Attachment {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
content_type: o.prim(d, "contentType", Kind::Code),
language: o.prim(d, "language", Kind::Code),
data: o.prim(d, "data", Kind::Base64Binary),
url: o.prim(d, "url", Kind::Url),
size: o.prim(d, "size", Kind::UnsignedInt),
hash: o.prim(d, "hash", Kind::Base64Binary),
title: o.prim(d, "title", Kind::String),
creation: o.prim(d, "creation", 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.prim("contentType", &self.content_type);
w.prim("language", &self.language);
w.prim("data", &self.data);
w.prim("url", &self.url);
w.prim("size", &self.size);
w.prim("hash", &self.hash);
w.prim("title", &self.title);
w.prim("creation", &self.creation);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct CodeableConcept {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub coding: Vec<Coding>,
pub text: Option<Primitive<String>>,
}
impl FhirJson for CodeableConcept {
const TYPE_NAME: &'static str = "CodeableConcept";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = CodeableConcept {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
coding: o.list(d, "coding"),
text: o.prim(d, "text", 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("coding", &self.coding);
w.prim("text", &self.text);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Coding {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub system: Option<Primitive<String>>,
pub version: Option<Primitive<String>>,
pub code: Option<Primitive<String>>,
pub display: Option<Primitive<String>>,
pub user_selected: Option<Primitive<bool>>,
}
impl FhirJson for Coding {
const TYPE_NAME: &'static str = "Coding";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = Coding {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
system: o.prim(d, "system", Kind::Uri),
version: o.prim(d, "version", Kind::String),
code: o.prim(d, "code", Kind::Code),
display: o.prim(d, "display", Kind::String),
user_selected: o.prim(d, "userSelected", Kind::Boolean),
};
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.prim("system", &self.system);
w.prim("version", &self.version);
w.prim("code", &self.code);
w.prim("display", &self.display);
w.prim("userSelected", &self.user_selected);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct ContactDetail {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub name: Option<Primitive<String>>,
pub telecom: Vec<ContactPoint>,
}
impl FhirJson for ContactDetail {
const TYPE_NAME: &'static str = "ContactDetail";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = ContactDetail {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
name: o.prim(d, "name", Kind::String),
telecom: o.list(d, "telecom"),
};
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.prim("name", &self.name);
w.list("telecom", &self.telecom);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct ContactPoint {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub system: Option<Primitive<String>>,
pub value: Option<Primitive<String>>,
pub use_: Option<Primitive<String>>,
pub rank: Option<Primitive<i32>>,
pub period: Option<Period>,
}
impl FhirJson for ContactPoint {
const TYPE_NAME: &'static str = "ContactPoint";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = ContactPoint {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
system: o.prim(d, "system", Kind::Code),
value: o.prim(d, "value", Kind::String),
use_: o.prim(d, "use", Kind::Code),
rank: o.prim(d, "rank", Kind::PositiveInt),
period: o.one(d, "period"),
};
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.prim("system", &self.system);
w.prim("value", &self.value);
w.prim("use", &self.use_);
w.prim("rank", &self.rank);
w.one("period", &self.period);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Contributor {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub type_: Option<Primitive<String>>,
pub name: Option<Primitive<String>>,
pub contact: Vec<ContactDetail>,
}
impl FhirJson for Contributor {
const TYPE_NAME: &'static str = "Contributor";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = Contributor {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
type_: o.prim(d, "type", Kind::Code),
name: o.prim(d, "name", Kind::String),
contact: o.list(d, "contact"),
};
required(d, "type", &r.type_);
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.prim("type", &self.type_);
w.prim("name", &self.name);
w.list("contact", &self.contact);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Count {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub value: Option<Primitive<Decimal>>,
pub comparator: Option<Primitive<String>>,
pub unit: Option<Primitive<String>>,
pub system: Option<Primitive<String>>,
pub code: Option<Primitive<String>>,
}
impl FhirJson for Count {
const TYPE_NAME: &'static str = "Count";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = Count {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
value: o.prim(d, "value", Kind::Decimal),
comparator: o.prim(d, "comparator", Kind::Code),
unit: o.prim(d, "unit", Kind::String),
system: o.prim(d, "system", Kind::Uri),
code: o.prim(d, "code", Kind::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.prim("value", &self.value);
w.prim("comparator", &self.comparator);
w.prim("unit", &self.unit);
w.prim("system", &self.system);
w.prim("code", &self.code);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct DataRequirement {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub type_: Option<Primitive<String>>,
pub profile: Vec<Primitive<String>>,
pub subject: Option<DataRequirementSubject>,
pub must_support: Vec<Primitive<String>>,
pub code_filter: Vec<DataRequirementCodeFilter>,
pub date_filter: Vec<DataRequirementDateFilter>,
pub limit: Option<Primitive<i32>>,
pub sort: Vec<DataRequirementSort>,
}
impl FhirJson for DataRequirement {
const TYPE_NAME: &'static str = "DataRequirement";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = DataRequirement {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
type_: o.prim(d, "type", Kind::Code),
profile: o.prim_list(d, "profile", Kind::Canonical),
subject: o.choice(d, "subject"),
must_support: o.prim_list(d, "mustSupport", Kind::String),
code_filter: o.list(d, "codeFilter"),
date_filter: o.list(d, "dateFilter"),
limit: o.prim(d, "limit", Kind::PositiveInt),
sort: o.list(d, "sort"),
};
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.prim("type", &self.type_);
w.prim_list("profile", &self.profile);
w.choice("subject", &self.subject);
w.prim_list("mustSupport", &self.must_support);
w.list("codeFilter", &self.code_filter);
w.list("dateFilter", &self.date_filter);
w.prim("limit", &self.limit);
w.list("sort", &self.sort);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct DataRequirementCodeFilter {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub path: Option<Primitive<String>>,
pub search_param: Option<Primitive<String>>,
pub value_set: Option<Primitive<String>>,
pub code: Vec<Coding>,
}
impl FhirJson for DataRequirementCodeFilter {
const TYPE_NAME: &'static str = "DataRequirementCodeFilter";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = DataRequirementCodeFilter {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
path: o.prim(d, "path", Kind::String),
search_param: o.prim(d, "searchParam", Kind::String),
value_set: o.prim(d, "valueSet", Kind::Canonical),
code: o.list(d, "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.prim("path", &self.path);
w.prim("searchParam", &self.search_param);
w.prim("valueSet", &self.value_set);
w.list("code", &self.code);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct DataRequirementDateFilter {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub path: Option<Primitive<String>>,
pub search_param: Option<Primitive<String>>,
pub value: Option<DataRequirementDateFilterValue>,
}
impl FhirJson for DataRequirementDateFilter {
const TYPE_NAME: &'static str = "DataRequirementDateFilter";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = DataRequirementDateFilter {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
path: o.prim(d, "path", Kind::String),
search_param: o.prim(d, "searchParam", Kind::String),
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.prim("path", &self.path);
w.prim("searchParam", &self.search_param);
w.choice("value", &self.value);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct DataRequirementSort {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub path: Option<Primitive<String>>,
pub direction: Option<Primitive<String>>,
}
impl FhirJson for DataRequirementSort {
const TYPE_NAME: &'static str = "DataRequirementSort";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = DataRequirementSort {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
path: o.prim(d, "path", Kind::String),
direction: o.prim(d, "direction", Kind::Code),
};
required(d, "path", &r.path);
required(d, "direction", &r.direction);
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.prim("path", &self.path);
w.prim("direction", &self.direction);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Distance {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub value: Option<Primitive<Decimal>>,
pub comparator: Option<Primitive<String>>,
pub unit: Option<Primitive<String>>,
pub system: Option<Primitive<String>>,
pub code: Option<Primitive<String>>,
}
impl FhirJson for Distance {
const TYPE_NAME: &'static str = "Distance";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = Distance {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
value: o.prim(d, "value", Kind::Decimal),
comparator: o.prim(d, "comparator", Kind::Code),
unit: o.prim(d, "unit", Kind::String),
system: o.prim(d, "system", Kind::Uri),
code: o.prim(d, "code", Kind::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.prim("value", &self.value);
w.prim("comparator", &self.comparator);
w.prim("unit", &self.unit);
w.prim("system", &self.system);
w.prim("code", &self.code);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Dosage {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub sequence: Option<Primitive<i32>>,
pub text: Option<Primitive<String>>,
pub additional_instruction: Vec<CodeableConcept>,
pub patient_instruction: Option<Primitive<String>>,
pub timing: Option<Timing>,
pub as_needed: Option<DosageAsNeeded>,
pub site: Option<CodeableConcept>,
pub route: Option<CodeableConcept>,
pub method: Option<CodeableConcept>,
pub dose_and_rate: Vec<DosageDoseAndRate>,
pub max_dose_per_period: Option<Ratio>,
pub max_dose_per_administration: Option<Quantity>,
pub max_dose_per_lifetime: Option<Quantity>,
}
impl FhirJson for Dosage {
const TYPE_NAME: &'static str = "Dosage";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = Dosage {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
sequence: o.prim(d, "sequence", Kind::Integer),
text: o.prim(d, "text", Kind::String),
additional_instruction: o.list(d, "additionalInstruction"),
patient_instruction: o.prim(d, "patientInstruction", Kind::String),
timing: o.one(d, "timing"),
as_needed: o.choice(d, "asNeeded"),
site: o.one(d, "site"),
route: o.one(d, "route"),
method: o.one(d, "method"),
dose_and_rate: o.list(d, "doseAndRate"),
max_dose_per_period: o.one(d, "maxDosePerPeriod"),
max_dose_per_administration: o.one(d, "maxDosePerAdministration"),
max_dose_per_lifetime: o.one(d, "maxDosePerLifetime"),
};
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("sequence", &self.sequence);
w.prim("text", &self.text);
w.list("additionalInstruction", &self.additional_instruction);
w.prim("patientInstruction", &self.patient_instruction);
w.one("timing", &self.timing);
w.choice("asNeeded", &self.as_needed);
w.one("site", &self.site);
w.one("route", &self.route);
w.one("method", &self.method);
w.list("doseAndRate", &self.dose_and_rate);
w.one("maxDosePerPeriod", &self.max_dose_per_period);
w.one(
"maxDosePerAdministration",
&self.max_dose_per_administration,
);
w.one("maxDosePerLifetime", &self.max_dose_per_lifetime);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct DosageDoseAndRate {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub type_: Option<CodeableConcept>,
pub dose: Option<DosageDoseAndRateDose>,
pub rate: Option<DosageDoseAndRateRate>,
}
impl FhirJson for DosageDoseAndRate {
const TYPE_NAME: &'static str = "DosageDoseAndRate";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = DosageDoseAndRate {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
type_: o.one(d, "type"),
dose: o.choice(d, "dose"),
rate: o.choice(d, "rate"),
};
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.one("type", &self.type_);
w.choice("dose", &self.dose);
w.choice("rate", &self.rate);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Duration {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub value: Option<Primitive<Decimal>>,
pub comparator: Option<Primitive<String>>,
pub unit: Option<Primitive<String>>,
pub system: Option<Primitive<String>>,
pub code: Option<Primitive<String>>,
}
impl FhirJson for Duration {
const TYPE_NAME: &'static str = "Duration";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = Duration {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
value: o.prim(d, "value", Kind::Decimal),
comparator: o.prim(d, "comparator", Kind::Code),
unit: o.prim(d, "unit", Kind::String),
system: o.prim(d, "system", Kind::Uri),
code: o.prim(d, "code", Kind::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.prim("value", &self.value);
w.prim("comparator", &self.comparator);
w.prim("unit", &self.unit);
w.prim("system", &self.system);
w.prim("code", &self.code);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct ElementDefinition {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub path: Option<Primitive<String>>,
pub representation: Vec<Primitive<String>>,
pub slice_name: Option<Primitive<String>>,
pub slice_is_constraining: Option<Primitive<bool>>,
pub label: Option<Primitive<String>>,
pub code: Vec<Coding>,
pub slicing: Option<ElementDefinitionSlicing>,
pub short: Option<Primitive<String>>,
pub definition: Option<Primitive<String>>,
pub comment: Option<Primitive<String>>,
pub requirements: Option<Primitive<String>>,
pub alias: Vec<Primitive<String>>,
pub min: Option<Primitive<i32>>,
pub max: Option<Primitive<String>>,
pub base: Option<ElementDefinitionBase>,
pub content_reference: Option<Primitive<String>>,
pub type_: Vec<ElementDefinitionType>,
pub default_value: Option<ElementDefinitionDefaultValue>,
pub meaning_when_missing: Option<Primitive<String>>,
pub order_meaning: Option<Primitive<String>>,
pub fixed: Option<ElementDefinitionFixed>,
pub pattern: Option<ElementDefinitionPattern>,
pub example: Vec<ElementDefinitionExample>,
pub min_value: Option<ElementDefinitionMinValue>,
pub max_value: Option<ElementDefinitionMaxValue>,
pub max_length: Option<Primitive<i32>>,
pub condition: Vec<Primitive<String>>,
pub constraint: Vec<ElementDefinitionConstraint>,
pub must_support: Option<Primitive<bool>>,
pub is_modifier: Option<Primitive<bool>>,
pub is_modifier_reason: Option<Primitive<String>>,
pub is_summary: Option<Primitive<bool>>,
pub binding: Option<ElementDefinitionBinding>,
pub mapping: Vec<ElementDefinitionMapping>,
}
impl FhirJson for ElementDefinition {
const TYPE_NAME: &'static str = "ElementDefinition";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = ElementDefinition {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
path: o.prim(d, "path", Kind::String),
representation: o.prim_list(d, "representation", Kind::Code),
slice_name: o.prim(d, "sliceName", Kind::String),
slice_is_constraining: o.prim(d, "sliceIsConstraining", Kind::Boolean),
label: o.prim(d, "label", Kind::String),
code: o.list(d, "code"),
slicing: o.one(d, "slicing"),
short: o.prim(d, "short", Kind::String),
definition: o.prim(d, "definition", Kind::Markdown),
comment: o.prim(d, "comment", Kind::Markdown),
requirements: o.prim(d, "requirements", Kind::Markdown),
alias: o.prim_list(d, "alias", Kind::String),
min: o.prim(d, "min", Kind::UnsignedInt),
max: o.prim(d, "max", Kind::String),
base: o.one(d, "base"),
content_reference: o.prim(d, "contentReference", Kind::Uri),
type_: o.list(d, "type"),
default_value: o.choice(d, "defaultValue"),
meaning_when_missing: o.prim(d, "meaningWhenMissing", Kind::Markdown),
order_meaning: o.prim(d, "orderMeaning", Kind::String),
fixed: o.choice(d, "fixed"),
pattern: o.choice(d, "pattern"),
example: o.list(d, "example"),
min_value: o.choice(d, "minValue"),
max_value: o.choice(d, "maxValue"),
max_length: o.prim(d, "maxLength", Kind::Integer),
condition: o.prim_list(d, "condition", Kind::Id),
constraint: o.list(d, "constraint"),
must_support: o.prim(d, "mustSupport", Kind::Boolean),
is_modifier: o.prim(d, "isModifier", Kind::Boolean),
is_modifier_reason: o.prim(d, "isModifierReason", Kind::String),
is_summary: o.prim(d, "isSummary", Kind::Boolean),
binding: o.one(d, "binding"),
mapping: o.list(d, "mapping"),
};
required(d, "path", &r.path);
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("path", &self.path);
w.prim_list("representation", &self.representation);
w.prim("sliceName", &self.slice_name);
w.prim("sliceIsConstraining", &self.slice_is_constraining);
w.prim("label", &self.label);
w.list("code", &self.code);
w.one("slicing", &self.slicing);
w.prim("short", &self.short);
w.prim("definition", &self.definition);
w.prim("comment", &self.comment);
w.prim("requirements", &self.requirements);
w.prim_list("alias", &self.alias);
w.prim("min", &self.min);
w.prim("max", &self.max);
w.one("base", &self.base);
w.prim("contentReference", &self.content_reference);
w.list("type", &self.type_);
w.choice("defaultValue", &self.default_value);
w.prim("meaningWhenMissing", &self.meaning_when_missing);
w.prim("orderMeaning", &self.order_meaning);
w.choice("fixed", &self.fixed);
w.choice("pattern", &self.pattern);
w.list("example", &self.example);
w.choice("minValue", &self.min_value);
w.choice("maxValue", &self.max_value);
w.prim("maxLength", &self.max_length);
w.prim_list("condition", &self.condition);
w.list("constraint", &self.constraint);
w.prim("mustSupport", &self.must_support);
w.prim("isModifier", &self.is_modifier);
w.prim("isModifierReason", &self.is_modifier_reason);
w.prim("isSummary", &self.is_summary);
w.one("binding", &self.binding);
w.list("mapping", &self.mapping);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct ElementDefinitionSlicing {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub discriminator: Vec<ElementDefinitionSlicingDiscriminator>,
pub description: Option<Primitive<String>>,
pub ordered: Option<Primitive<bool>>,
pub rules: Option<Primitive<String>>,
}
impl FhirJson for ElementDefinitionSlicing {
const TYPE_NAME: &'static str = "ElementDefinitionSlicing";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = ElementDefinitionSlicing {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
discriminator: o.list(d, "discriminator"),
description: o.prim(d, "description", Kind::String),
ordered: o.prim(d, "ordered", Kind::Boolean),
rules: o.prim(d, "rules", Kind::Code),
};
required(d, "rules", &r.rules);
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("discriminator", &self.discriminator);
w.prim("description", &self.description);
w.prim("ordered", &self.ordered);
w.prim("rules", &self.rules);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct ElementDefinitionSlicingDiscriminator {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub type_: Option<Primitive<String>>,
pub path: Option<Primitive<String>>,
}
impl FhirJson for ElementDefinitionSlicingDiscriminator {
const TYPE_NAME: &'static str = "ElementDefinitionSlicingDiscriminator";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = ElementDefinitionSlicingDiscriminator {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
type_: o.prim(d, "type", Kind::Code),
path: o.prim(d, "path", Kind::String),
};
required(d, "type", &r.type_);
required(d, "path", &r.path);
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.prim("type", &self.type_);
w.prim("path", &self.path);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct ElementDefinitionBase {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub path: Option<Primitive<String>>,
pub min: Option<Primitive<i32>>,
pub max: Option<Primitive<String>>,
}
impl FhirJson for ElementDefinitionBase {
const TYPE_NAME: &'static str = "ElementDefinitionBase";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = ElementDefinitionBase {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
path: o.prim(d, "path", Kind::String),
min: o.prim(d, "min", Kind::UnsignedInt),
max: o.prim(d, "max", Kind::String),
};
required(d, "path", &r.path);
required(d, "min", &r.min);
required(d, "max", &r.max);
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.prim("path", &self.path);
w.prim("min", &self.min);
w.prim("max", &self.max);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct ElementDefinitionType {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub code: Option<Primitive<String>>,
pub profile: Vec<Primitive<String>>,
pub target_profile: Vec<Primitive<String>>,
pub aggregation: Vec<Primitive<String>>,
pub versioning: Option<Primitive<String>>,
}
impl FhirJson for ElementDefinitionType {
const TYPE_NAME: &'static str = "ElementDefinitionType";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = ElementDefinitionType {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
code: o.prim(d, "code", Kind::Uri),
profile: o.prim_list(d, "profile", Kind::Canonical),
target_profile: o.prim_list(d, "targetProfile", Kind::Canonical),
aggregation: o.prim_list(d, "aggregation", Kind::Code),
versioning: o.prim(d, "versioning", Kind::Code),
};
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.prim("code", &self.code);
w.prim_list("profile", &self.profile);
w.prim_list("targetProfile", &self.target_profile);
w.prim_list("aggregation", &self.aggregation);
w.prim("versioning", &self.versioning);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct ElementDefinitionExample {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub label: Option<Primitive<String>>,
pub value: Option<ElementDefinitionExampleValue>,
}
impl FhirJson for ElementDefinitionExample {
const TYPE_NAME: &'static str = "ElementDefinitionExample";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = ElementDefinitionExample {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
label: o.prim(d, "label", Kind::String),
value: o.choice(d, "value"),
};
required(d, "label", &r.label);
required(d, "value[x]", &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.prim("label", &self.label);
w.choice("value", &self.value);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct ElementDefinitionConstraint {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub key: Option<Primitive<String>>,
pub requirements: Option<Primitive<String>>,
pub severity: Option<Primitive<String>>,
pub human: Option<Primitive<String>>,
pub expression: Option<Primitive<String>>,
pub xpath: Option<Primitive<String>>,
pub source: Option<Primitive<String>>,
}
impl FhirJson for ElementDefinitionConstraint {
const TYPE_NAME: &'static str = "ElementDefinitionConstraint";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = ElementDefinitionConstraint {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
key: o.prim(d, "key", Kind::Id),
requirements: o.prim(d, "requirements", Kind::String),
severity: o.prim(d, "severity", Kind::Code),
human: o.prim(d, "human", Kind::String),
expression: o.prim(d, "expression", Kind::String),
xpath: o.prim(d, "xpath", Kind::String),
source: o.prim(d, "source", Kind::Canonical),
};
required(d, "key", &r.key);
required(d, "severity", &r.severity);
required(d, "human", &r.human);
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.prim("key", &self.key);
w.prim("requirements", &self.requirements);
w.prim("severity", &self.severity);
w.prim("human", &self.human);
w.prim("expression", &self.expression);
w.prim("xpath", &self.xpath);
w.prim("source", &self.source);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct ElementDefinitionBinding {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub strength: Option<Primitive<String>>,
pub description: Option<Primitive<String>>,
pub value_set: Option<Primitive<String>>,
}
impl FhirJson for ElementDefinitionBinding {
const TYPE_NAME: &'static str = "ElementDefinitionBinding";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = ElementDefinitionBinding {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
strength: o.prim(d, "strength", Kind::Code),
description: o.prim(d, "description", Kind::String),
value_set: o.prim(d, "valueSet", Kind::Canonical),
};
required(d, "strength", &r.strength);
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.prim("strength", &self.strength);
w.prim("description", &self.description);
w.prim("valueSet", &self.value_set);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct ElementDefinitionMapping {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub identity: Option<Primitive<String>>,
pub language: Option<Primitive<String>>,
pub map: Option<Primitive<String>>,
pub comment: Option<Primitive<String>>,
}
impl FhirJson for ElementDefinitionMapping {
const TYPE_NAME: &'static str = "ElementDefinitionMapping";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = ElementDefinitionMapping {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
identity: o.prim(d, "identity", Kind::Id),
language: o.prim(d, "language", Kind::Code),
map: o.prim(d, "map", Kind::String),
comment: o.prim(d, "comment", Kind::String),
};
required(d, "identity", &r.identity);
required(d, "map", &r.map);
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.prim("identity", &self.identity);
w.prim("language", &self.language);
w.prim("map", &self.map);
w.prim("comment", &self.comment);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Expression {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub description: Option<Primitive<String>>,
pub name: Option<Primitive<String>>,
pub language: Option<Primitive<String>>,
pub expression: Option<Primitive<String>>,
pub reference: Option<Primitive<String>>,
}
impl FhirJson for Expression {
const TYPE_NAME: &'static str = "Expression";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = Expression {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
description: o.prim(d, "description", Kind::String),
name: o.prim(d, "name", Kind::Id),
language: o.prim(d, "language", Kind::Code),
expression: o.prim(d, "expression", Kind::String),
reference: o.prim(d, "reference", Kind::Uri),
};
required(d, "language", &r.language);
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.prim("description", &self.description);
w.prim("name", &self.name);
w.prim("language", &self.language);
w.prim("expression", &self.expression);
w.prim("reference", &self.reference);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Extension {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub url: Option<String>,
pub value: Option<ExtensionValue>,
}
impl FhirJson for Extension {
const TYPE_NAME: &'static str = "Extension";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = Extension {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
url: o.string(d, "url"),
value: o.choice(d, "value"),
};
required(d, "url", &r.url);
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.string("url", &self.url);
w.choice("value", &self.value);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct HumanName {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub use_: Option<Primitive<String>>,
pub text: Option<Primitive<String>>,
pub family: Option<Primitive<String>>,
pub given: Vec<Primitive<String>>,
pub prefix: Vec<Primitive<String>>,
pub suffix: Vec<Primitive<String>>,
pub period: Option<Period>,
}
impl FhirJson for HumanName {
const TYPE_NAME: &'static str = "HumanName";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = HumanName {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
use_: o.prim(d, "use", Kind::Code),
text: o.prim(d, "text", Kind::String),
family: o.prim(d, "family", Kind::String),
given: o.prim_list(d, "given", Kind::String),
prefix: o.prim_list(d, "prefix", Kind::String),
suffix: o.prim_list(d, "suffix", Kind::String),
period: o.one(d, "period"),
};
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.prim("use", &self.use_);
w.prim("text", &self.text);
w.prim("family", &self.family);
w.prim_list("given", &self.given);
w.prim_list("prefix", &self.prefix);
w.prim_list("suffix", &self.suffix);
w.one("period", &self.period);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Identifier {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub use_: Option<Primitive<String>>,
pub type_: Option<CodeableConcept>,
pub system: Option<Primitive<String>>,
pub value: Option<Primitive<String>>,
pub period: Option<Period>,
pub assigner: Option<Box<Reference>>,
}
impl FhirJson for Identifier {
const TYPE_NAME: &'static str = "Identifier";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = Identifier {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
use_: o.prim(d, "use", Kind::Code),
type_: o.one(d, "type"),
system: o.prim(d, "system", Kind::Uri),
value: o.prim(d, "value", Kind::String),
period: o.one(d, "period"),
assigner: o.one(d, "assigner"),
};
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.prim("use", &self.use_);
w.one("type", &self.type_);
w.prim("system", &self.system);
w.prim("value", &self.value);
w.one("period", &self.period);
w.one("assigner", &self.assigner);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct MarketingStatus {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub country: Option<CodeableConcept>,
pub jurisdiction: Option<CodeableConcept>,
pub status: Option<CodeableConcept>,
pub date_range: Option<Period>,
pub restore_date: Option<Primitive<String>>,
}
impl FhirJson for MarketingStatus {
const TYPE_NAME: &'static str = "MarketingStatus";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = MarketingStatus {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
country: o.one(d, "country"),
jurisdiction: o.one(d, "jurisdiction"),
status: o.one(d, "status"),
date_range: o.one(d, "dateRange"),
restore_date: o.prim(d, "restoreDate", Kind::DateTime),
};
required(d, "country", &r.country);
required(d, "status", &r.status);
required(d, "dateRange", &r.date_range);
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("country", &self.country);
w.one("jurisdiction", &self.jurisdiction);
w.one("status", &self.status);
w.one("dateRange", &self.date_range);
w.prim("restoreDate", &self.restore_date);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Meta {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub version_id: Option<Primitive<String>>,
pub last_updated: Option<Primitive<String>>,
pub source: Option<Primitive<String>>,
pub profile: Vec<Primitive<String>>,
pub security: Vec<Coding>,
pub tag: Vec<Coding>,
}
impl FhirJson for Meta {
const TYPE_NAME: &'static str = "Meta";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = Meta {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
version_id: o.prim(d, "versionId", Kind::Id),
last_updated: o.prim(d, "lastUpdated", Kind::Instant),
source: o.prim(d, "source", Kind::Uri),
profile: o.prim_list(d, "profile", Kind::Canonical),
security: o.list(d, "security"),
tag: o.list(d, "tag"),
};
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.prim("versionId", &self.version_id);
w.prim("lastUpdated", &self.last_updated);
w.prim("source", &self.source);
w.prim_list("profile", &self.profile);
w.list("security", &self.security);
w.list("tag", &self.tag);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Money {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub value: Option<Primitive<Decimal>>,
pub currency: Option<Primitive<String>>,
}
impl FhirJson for Money {
const TYPE_NAME: &'static str = "Money";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = Money {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
value: o.prim(d, "value", Kind::Decimal),
currency: o.prim(d, "currency", Kind::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.prim("value", &self.value);
w.prim("currency", &self.currency);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Narrative {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub status: Option<Primitive<String>>,
pub div: Option<Primitive<String>>,
}
impl FhirJson for Narrative {
const TYPE_NAME: &'static str = "Narrative";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = Narrative {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
status: o.prim(d, "status", Kind::Code),
div: o.prim(d, "div", Kind::Xhtml),
};
required(d, "status", &r.status);
required(d, "div", &r.div);
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.prim("status", &self.status);
w.prim("div", &self.div);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct ParameterDefinition {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub name: Option<Primitive<String>>,
pub use_: Option<Primitive<String>>,
pub min: Option<Primitive<i32>>,
pub max: Option<Primitive<String>>,
pub documentation: Option<Primitive<String>>,
pub type_: Option<Primitive<String>>,
pub profile: Option<Primitive<String>>,
}
impl FhirJson for ParameterDefinition {
const TYPE_NAME: &'static str = "ParameterDefinition";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = ParameterDefinition {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
name: o.prim(d, "name", Kind::Code),
use_: o.prim(d, "use", Kind::Code),
min: o.prim(d, "min", Kind::Integer),
max: o.prim(d, "max", Kind::String),
documentation: o.prim(d, "documentation", Kind::String),
type_: o.prim(d, "type", Kind::Code),
profile: o.prim(d, "profile", Kind::Canonical),
};
required(d, "use", &r.use_);
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.prim("name", &self.name);
w.prim("use", &self.use_);
w.prim("min", &self.min);
w.prim("max", &self.max);
w.prim("documentation", &self.documentation);
w.prim("type", &self.type_);
w.prim("profile", &self.profile);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Period {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub start: Option<Primitive<String>>,
pub end: Option<Primitive<String>>,
}
impl FhirJson for Period {
const TYPE_NAME: &'static str = "Period";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = Period {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
start: o.prim(d, "start", Kind::DateTime),
end: o.prim(d, "end", 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.prim("start", &self.start);
w.prim("end", &self.end);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Population {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub age: Option<PopulationAge>,
pub gender: Option<CodeableConcept>,
pub race: Option<CodeableConcept>,
pub physiological_condition: Option<CodeableConcept>,
}
impl FhirJson for Population {
const TYPE_NAME: &'static str = "Population";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = Population {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
age: o.choice(d, "age"),
gender: o.one(d, "gender"),
race: o.one(d, "race"),
physiological_condition: o.one(d, "physiologicalCondition"),
};
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("age", &self.age);
w.one("gender", &self.gender);
w.one("race", &self.race);
w.one("physiologicalCondition", &self.physiological_condition);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct ProdCharacteristic {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub height: Option<Quantity>,
pub width: Option<Quantity>,
pub depth: Option<Quantity>,
pub weight: Option<Quantity>,
pub nominal_volume: Option<Quantity>,
pub external_diameter: Option<Quantity>,
pub shape: Option<Primitive<String>>,
pub color: Vec<Primitive<String>>,
pub imprint: Vec<Primitive<String>>,
pub image: Vec<Attachment>,
pub scoring: Option<CodeableConcept>,
}
impl FhirJson for ProdCharacteristic {
const TYPE_NAME: &'static str = "ProdCharacteristic";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = ProdCharacteristic {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
height: o.one(d, "height"),
width: o.one(d, "width"),
depth: o.one(d, "depth"),
weight: o.one(d, "weight"),
nominal_volume: o.one(d, "nominalVolume"),
external_diameter: o.one(d, "externalDiameter"),
shape: o.prim(d, "shape", Kind::String),
color: o.prim_list(d, "color", Kind::String),
imprint: o.prim_list(d, "imprint", Kind::String),
image: o.list(d, "image"),
scoring: o.one(d, "scoring"),
};
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("height", &self.height);
w.one("width", &self.width);
w.one("depth", &self.depth);
w.one("weight", &self.weight);
w.one("nominalVolume", &self.nominal_volume);
w.one("externalDiameter", &self.external_diameter);
w.prim("shape", &self.shape);
w.prim_list("color", &self.color);
w.prim_list("imprint", &self.imprint);
w.list("image", &self.image);
w.one("scoring", &self.scoring);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct ProductShelfLife {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub identifier: Option<Identifier>,
pub type_: Option<CodeableConcept>,
pub period: Option<Quantity>,
pub special_precautions_for_storage: Vec<CodeableConcept>,
}
impl FhirJson for ProductShelfLife {
const TYPE_NAME: &'static str = "ProductShelfLife";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = ProductShelfLife {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
identifier: o.one(d, "identifier"),
type_: o.one(d, "type"),
period: o.one(d, "period"),
special_precautions_for_storage: o.list(d, "specialPrecautionsForStorage"),
};
required(d, "type", &r.type_);
required(d, "period", &r.period);
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("type", &self.type_);
w.one("period", &self.period);
w.list(
"specialPrecautionsForStorage",
&self.special_precautions_for_storage,
);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Quantity {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub value: Option<Primitive<Decimal>>,
pub comparator: Option<Primitive<String>>,
pub unit: Option<Primitive<String>>,
pub system: Option<Primitive<String>>,
pub code: Option<Primitive<String>>,
}
impl FhirJson for Quantity {
const TYPE_NAME: &'static str = "Quantity";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = Quantity {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
value: o.prim(d, "value", Kind::Decimal),
comparator: o.prim(d, "comparator", Kind::Code),
unit: o.prim(d, "unit", Kind::String),
system: o.prim(d, "system", Kind::Uri),
code: o.prim(d, "code", Kind::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.prim("value", &self.value);
w.prim("comparator", &self.comparator);
w.prim("unit", &self.unit);
w.prim("system", &self.system);
w.prim("code", &self.code);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Range {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub low: Option<Quantity>,
pub high: Option<Quantity>,
}
impl FhirJson for Range {
const TYPE_NAME: &'static str = "Range";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = Range {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
low: o.one(d, "low"),
high: o.one(d, "high"),
};
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.one("low", &self.low);
w.one("high", &self.high);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Ratio {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub numerator: Option<Quantity>,
pub denominator: Option<Quantity>,
}
impl FhirJson for Ratio {
const TYPE_NAME: &'static str = "Ratio";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = Ratio {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
numerator: o.one(d, "numerator"),
denominator: o.one(d, "denominator"),
};
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.one("numerator", &self.numerator);
w.one("denominator", &self.denominator);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Reference {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub reference: Option<Primitive<String>>,
pub type_: Option<Primitive<String>>,
pub identifier: Option<Box<Identifier>>,
pub display: Option<Primitive<String>>,
}
impl FhirJson for Reference {
const TYPE_NAME: &'static str = "Reference";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = Reference {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
reference: o.prim(d, "reference", Kind::String),
type_: o.prim(d, "type", Kind::Uri),
identifier: o.one(d, "identifier"),
display: o.prim(d, "display", 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.prim("reference", &self.reference);
w.prim("type", &self.type_);
w.one("identifier", &self.identifier);
w.prim("display", &self.display);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct RelatedArtifact {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub type_: Option<Primitive<String>>,
pub label: Option<Primitive<String>>,
pub display: Option<Primitive<String>>,
pub citation: Option<Primitive<String>>,
pub url: Option<Primitive<String>>,
pub document: Option<Attachment>,
pub resource: Option<Primitive<String>>,
}
impl FhirJson for RelatedArtifact {
const TYPE_NAME: &'static str = "RelatedArtifact";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = RelatedArtifact {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
type_: o.prim(d, "type", Kind::Code),
label: o.prim(d, "label", Kind::String),
display: o.prim(d, "display", Kind::String),
citation: o.prim(d, "citation", Kind::Markdown),
url: o.prim(d, "url", Kind::Url),
document: o.one(d, "document"),
resource: o.prim(d, "resource", Kind::Canonical),
};
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.prim("type", &self.type_);
w.prim("label", &self.label);
w.prim("display", &self.display);
w.prim("citation", &self.citation);
w.prim("url", &self.url);
w.one("document", &self.document);
w.prim("resource", &self.resource);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct SampledData {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub origin: Option<Quantity>,
pub period: Option<Primitive<Decimal>>,
pub factor: Option<Primitive<Decimal>>,
pub lower_limit: Option<Primitive<Decimal>>,
pub upper_limit: Option<Primitive<Decimal>>,
pub dimensions: Option<Primitive<i32>>,
pub data: Option<Primitive<String>>,
}
impl FhirJson for SampledData {
const TYPE_NAME: &'static str = "SampledData";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = SampledData {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
origin: o.one(d, "origin"),
period: o.prim(d, "period", Kind::Decimal),
factor: o.prim(d, "factor", Kind::Decimal),
lower_limit: o.prim(d, "lowerLimit", Kind::Decimal),
upper_limit: o.prim(d, "upperLimit", Kind::Decimal),
dimensions: o.prim(d, "dimensions", Kind::PositiveInt),
data: o.prim(d, "data", Kind::String),
};
required(d, "origin", &r.origin);
required(d, "period", &r.period);
required(d, "dimensions", &r.dimensions);
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.one("origin", &self.origin);
w.prim("period", &self.period);
w.prim("factor", &self.factor);
w.prim("lowerLimit", &self.lower_limit);
w.prim("upperLimit", &self.upper_limit);
w.prim("dimensions", &self.dimensions);
w.prim("data", &self.data);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Signature {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub type_: Vec<Coding>,
pub when: Option<Primitive<String>>,
pub who: Option<Reference>,
pub on_behalf_of: Option<Reference>,
pub target_format: Option<Primitive<String>>,
pub sig_format: Option<Primitive<String>>,
pub data: Option<Primitive<String>>,
}
impl FhirJson for Signature {
const TYPE_NAME: &'static str = "Signature";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = Signature {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
type_: o.list(d, "type"),
when: o.prim(d, "when", Kind::Instant),
who: o.one(d, "who"),
on_behalf_of: o.one(d, "onBehalfOf"),
target_format: o.prim(d, "targetFormat", Kind::Code),
sig_format: o.prim(d, "sigFormat", Kind::Code),
data: o.prim(d, "data", Kind::Base64Binary),
};
required_list(d, "type", &r.type_, 1);
required(d, "when", &r.when);
required(d, "who", &r.who);
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("type", &self.type_);
w.prim("when", &self.when);
w.one("who", &self.who);
w.one("onBehalfOf", &self.on_behalf_of);
w.prim("targetFormat", &self.target_format);
w.prim("sigFormat", &self.sig_format);
w.prim("data", &self.data);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct SubstanceAmount {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub amount: Option<SubstanceAmountAmount>,
pub amount_type: Option<CodeableConcept>,
pub amount_text: Option<Primitive<String>>,
pub reference_range: Option<SubstanceAmountReferenceRange>,
}
impl FhirJson for SubstanceAmount {
const TYPE_NAME: &'static str = "SubstanceAmount";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = SubstanceAmount {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
amount: o.choice(d, "amount"),
amount_type: o.one(d, "amountType"),
amount_text: o.prim(d, "amountText", Kind::String),
reference_range: o.one(d, "referenceRange"),
};
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("amount", &self.amount);
w.one("amountType", &self.amount_type);
w.prim("amountText", &self.amount_text);
w.one("referenceRange", &self.reference_range);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct SubstanceAmountReferenceRange {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub low_limit: Option<Quantity>,
pub high_limit: Option<Quantity>,
}
impl FhirJson for SubstanceAmountReferenceRange {
const TYPE_NAME: &'static str = "SubstanceAmountReferenceRange";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = SubstanceAmountReferenceRange {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
low_limit: o.one(d, "lowLimit"),
high_limit: o.one(d, "highLimit"),
};
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.one("lowLimit", &self.low_limit);
w.one("highLimit", &self.high_limit);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Timing {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub event: Vec<Primitive<String>>,
pub repeat: Option<TimingRepeat>,
pub code: Option<CodeableConcept>,
}
impl FhirJson for Timing {
const TYPE_NAME: &'static str = "Timing";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = Timing {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
event: o.prim_list(d, "event", Kind::DateTime),
repeat: o.one(d, "repeat"),
code: o.one(d, "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.prim_list("event", &self.event);
w.one("repeat", &self.repeat);
w.one("code", &self.code);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct TimingRepeat {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub bounds: Option<TimingRepeatBounds>,
pub count: Option<Primitive<i32>>,
pub count_max: Option<Primitive<i32>>,
pub duration: Option<Primitive<Decimal>>,
pub duration_max: Option<Primitive<Decimal>>,
pub duration_unit: Option<Primitive<String>>,
pub frequency: Option<Primitive<i32>>,
pub frequency_max: Option<Primitive<i32>>,
pub period: Option<Primitive<Decimal>>,
pub period_max: Option<Primitive<Decimal>>,
pub period_unit: Option<Primitive<String>>,
pub day_of_week: Vec<Primitive<String>>,
pub time_of_day: Vec<Primitive<String>>,
pub when: Vec<Primitive<String>>,
pub offset: Option<Primitive<i32>>,
}
impl FhirJson for TimingRepeat {
const TYPE_NAME: &'static str = "TimingRepeat";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = TimingRepeat {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
bounds: o.choice(d, "bounds"),
count: o.prim(d, "count", Kind::PositiveInt),
count_max: o.prim(d, "countMax", Kind::PositiveInt),
duration: o.prim(d, "duration", Kind::Decimal),
duration_max: o.prim(d, "durationMax", Kind::Decimal),
duration_unit: o.prim(d, "durationUnit", Kind::Code),
frequency: o.prim(d, "frequency", Kind::PositiveInt),
frequency_max: o.prim(d, "frequencyMax", Kind::PositiveInt),
period: o.prim(d, "period", Kind::Decimal),
period_max: o.prim(d, "periodMax", Kind::Decimal),
period_unit: o.prim(d, "periodUnit", Kind::Code),
day_of_week: o.prim_list(d, "dayOfWeek", Kind::Code),
time_of_day: o.prim_list(d, "timeOfDay", Kind::Time),
when: o.prim_list(d, "when", Kind::Code),
offset: o.prim(d, "offset", Kind::UnsignedInt),
};
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.choice("bounds", &self.bounds);
w.prim("count", &self.count);
w.prim("countMax", &self.count_max);
w.prim("duration", &self.duration);
w.prim("durationMax", &self.duration_max);
w.prim("durationUnit", &self.duration_unit);
w.prim("frequency", &self.frequency);
w.prim("frequencyMax", &self.frequency_max);
w.prim("period", &self.period);
w.prim("periodMax", &self.period_max);
w.prim("periodUnit", &self.period_unit);
w.prim_list("dayOfWeek", &self.day_of_week);
w.prim_list("timeOfDay", &self.time_of_day);
w.prim_list("when", &self.when);
w.prim("offset", &self.offset);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct TriggerDefinition {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub type_: Option<Primitive<String>>,
pub name: Option<Primitive<String>>,
pub timing: Option<TriggerDefinitionTiming>,
pub data: Vec<DataRequirement>,
pub condition: Option<Expression>,
}
impl FhirJson for TriggerDefinition {
const TYPE_NAME: &'static str = "TriggerDefinition";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = TriggerDefinition {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
type_: o.prim(d, "type", Kind::Code),
name: o.prim(d, "name", Kind::String),
timing: o.choice(d, "timing"),
data: o.list(d, "data"),
condition: o.one(d, "condition"),
};
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.prim("type", &self.type_);
w.prim("name", &self.name);
w.choice("timing", &self.timing);
w.list("data", &self.data);
w.one("condition", &self.condition);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct UsageContext {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub code: Option<Coding>,
pub value: Option<UsageContextValue>,
}
impl FhirJson for UsageContext {
const TYPE_NAME: &'static str = "UsageContext";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = UsageContext {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
code: o.one(d, "code"),
value: o.choice(d, "value"),
};
required(d, "code", &r.code);
required(d, "value[x]", &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.one("code", &self.code);
w.choice("value", &self.value);
w.finish()
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum AnnotationAuthor {
Reference(Reference),
String(Primitive<String>),
}
impl Choice for AnnotationAuthor {
const TYPES: &'static [&'static str] = &["Reference", "string"];
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),
"string" => o.prim(d, key, Kind::String).map(Self::String),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::Reference(v) => w.value(&choice_key(base, "Reference"), v),
Self::String(v) => w.prim_value(&choice_key(base, "string"), v),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum DataRequirementSubject {
CodeableConcept(CodeableConcept),
Reference(Reference),
}
impl Choice for DataRequirementSubject {
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),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum DataRequirementDateFilterValue {
DateTime(Primitive<String>),
Period(Period),
Duration(Duration),
}
impl Choice for DataRequirementDateFilterValue {
const TYPES: &'static [&'static str] = &["dateTime", "Period", "Duration"];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"dateTime" => o.prim(d, key, Kind::DateTime).map(Self::DateTime),
"Period" => o.one(d, key).map(Self::Period),
"Duration" => o.one(d, key).map(Self::Duration),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::DateTime(v) => w.prim_value(&choice_key(base, "dateTime"), v),
Self::Period(v) => w.value(&choice_key(base, "Period"), v),
Self::Duration(v) => w.value(&choice_key(base, "Duration"), v),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum DosageAsNeeded {
Boolean(Primitive<bool>),
CodeableConcept(CodeableConcept),
}
impl Choice for DosageAsNeeded {
const TYPES: &'static [&'static str] = &["boolean", "CodeableConcept"];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"boolean" => o.prim(d, key, Kind::Boolean).map(Self::Boolean),
"CodeableConcept" => o.one(d, key).map(Self::CodeableConcept),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::Boolean(v) => w.prim_value(&choice_key(base, "boolean"), v),
Self::CodeableConcept(v) => w.value(&choice_key(base, "CodeableConcept"), v),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum DosageDoseAndRateDose {
Range(Range),
Quantity(Quantity),
}
impl Choice for DosageDoseAndRateDose {
const TYPES: &'static [&'static str] = &["Range", "Quantity"];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"Range" => o.one(d, key).map(Self::Range),
"Quantity" => o.one(d, key).map(Self::Quantity),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::Range(v) => w.value(&choice_key(base, "Range"), v),
Self::Quantity(v) => w.value(&choice_key(base, "Quantity"), v),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum DosageDoseAndRateRate {
Ratio(Ratio),
Range(Range),
Quantity(Quantity),
}
impl Choice for DosageDoseAndRateRate {
const TYPES: &'static [&'static str] = &["Ratio", "Range", "Quantity"];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"Ratio" => o.one(d, key).map(Self::Ratio),
"Range" => o.one(d, key).map(Self::Range),
"Quantity" => o.one(d, key).map(Self::Quantity),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::Ratio(v) => w.value(&choice_key(base, "Ratio"), v),
Self::Range(v) => w.value(&choice_key(base, "Range"), v),
Self::Quantity(v) => w.value(&choice_key(base, "Quantity"), v),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum ElementDefinitionDefaultValue {
Base64Binary(Primitive<String>),
Boolean(Primitive<bool>),
Canonical(Primitive<String>),
Code(Primitive<String>),
Date(Primitive<String>),
DateTime(Primitive<String>),
Decimal(Primitive<Decimal>),
Id(Primitive<String>),
Instant(Primitive<String>),
Integer(Primitive<i32>),
Markdown(Primitive<String>),
Oid(Primitive<String>),
PositiveInt(Primitive<i32>),
String(Primitive<String>),
Time(Primitive<String>),
UnsignedInt(Primitive<i32>),
Uri(Primitive<String>),
Url(Primitive<String>),
Uuid(Primitive<String>),
Address(Address),
Age(Age),
Annotation(Annotation),
Attachment(Attachment),
CodeableConcept(CodeableConcept),
Coding(Coding),
ContactPoint(ContactPoint),
Count(Count),
Distance(Distance),
Duration(Duration),
HumanName(HumanName),
Identifier(Identifier),
Money(Money),
Period(Period),
Quantity(Quantity),
Range(Range),
Ratio(Ratio),
Reference(Reference),
SampledData(SampledData),
Signature(Signature),
Timing(Timing),
ContactDetail(ContactDetail),
Contributor(Contributor),
DataRequirement(DataRequirement),
Expression(Expression),
ParameterDefinition(ParameterDefinition),
RelatedArtifact(RelatedArtifact),
TriggerDefinition(TriggerDefinition),
UsageContext(UsageContext),
Dosage(Dosage),
Meta(Meta),
}
impl Choice for ElementDefinitionDefaultValue {
const TYPES: &'static [&'static str] = &[
"base64Binary",
"boolean",
"canonical",
"code",
"date",
"dateTime",
"decimal",
"id",
"instant",
"integer",
"markdown",
"oid",
"positiveInt",
"string",
"time",
"unsignedInt",
"uri",
"url",
"uuid",
"Address",
"Age",
"Annotation",
"Attachment",
"CodeableConcept",
"Coding",
"ContactPoint",
"Count",
"Distance",
"Duration",
"HumanName",
"Identifier",
"Money",
"Period",
"Quantity",
"Range",
"Ratio",
"Reference",
"SampledData",
"Signature",
"Timing",
"ContactDetail",
"Contributor",
"DataRequirement",
"Expression",
"ParameterDefinition",
"RelatedArtifact",
"TriggerDefinition",
"UsageContext",
"Dosage",
"Meta",
];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"base64Binary" => o.prim(d, key, Kind::Base64Binary).map(Self::Base64Binary),
"boolean" => o.prim(d, key, Kind::Boolean).map(Self::Boolean),
"canonical" => o.prim(d, key, Kind::Canonical).map(Self::Canonical),
"code" => o.prim(d, key, Kind::Code).map(Self::Code),
"date" => o.prim(d, key, Kind::Date).map(Self::Date),
"dateTime" => o.prim(d, key, Kind::DateTime).map(Self::DateTime),
"decimal" => o.prim(d, key, Kind::Decimal).map(Self::Decimal),
"id" => o.prim(d, key, Kind::Id).map(Self::Id),
"instant" => o.prim(d, key, Kind::Instant).map(Self::Instant),
"integer" => o.prim(d, key, Kind::Integer).map(Self::Integer),
"markdown" => o.prim(d, key, Kind::Markdown).map(Self::Markdown),
"oid" => o.prim(d, key, Kind::Oid).map(Self::Oid),
"positiveInt" => o.prim(d, key, Kind::PositiveInt).map(Self::PositiveInt),
"string" => o.prim(d, key, Kind::String).map(Self::String),
"time" => o.prim(d, key, Kind::Time).map(Self::Time),
"unsignedInt" => o.prim(d, key, Kind::UnsignedInt).map(Self::UnsignedInt),
"uri" => o.prim(d, key, Kind::Uri).map(Self::Uri),
"url" => o.prim(d, key, Kind::Url).map(Self::Url),
"uuid" => o.prim(d, key, Kind::Uuid).map(Self::Uuid),
"Address" => o.one(d, key).map(Self::Address),
"Age" => o.one(d, key).map(Self::Age),
"Annotation" => o.one(d, key).map(Self::Annotation),
"Attachment" => o.one(d, key).map(Self::Attachment),
"CodeableConcept" => o.one(d, key).map(Self::CodeableConcept),
"Coding" => o.one(d, key).map(Self::Coding),
"ContactPoint" => o.one(d, key).map(Self::ContactPoint),
"Count" => o.one(d, key).map(Self::Count),
"Distance" => o.one(d, key).map(Self::Distance),
"Duration" => o.one(d, key).map(Self::Duration),
"HumanName" => o.one(d, key).map(Self::HumanName),
"Identifier" => o.one(d, key).map(Self::Identifier),
"Money" => o.one(d, key).map(Self::Money),
"Period" => o.one(d, key).map(Self::Period),
"Quantity" => o.one(d, key).map(Self::Quantity),
"Range" => o.one(d, key).map(Self::Range),
"Ratio" => o.one(d, key).map(Self::Ratio),
"Reference" => o.one(d, key).map(Self::Reference),
"SampledData" => o.one(d, key).map(Self::SampledData),
"Signature" => o.one(d, key).map(Self::Signature),
"Timing" => o.one(d, key).map(Self::Timing),
"ContactDetail" => o.one(d, key).map(Self::ContactDetail),
"Contributor" => o.one(d, key).map(Self::Contributor),
"DataRequirement" => o.one(d, key).map(Self::DataRequirement),
"Expression" => o.one(d, key).map(Self::Expression),
"ParameterDefinition" => o.one(d, key).map(Self::ParameterDefinition),
"RelatedArtifact" => o.one(d, key).map(Self::RelatedArtifact),
"TriggerDefinition" => o.one(d, key).map(Self::TriggerDefinition),
"UsageContext" => o.one(d, key).map(Self::UsageContext),
"Dosage" => o.one(d, key).map(Self::Dosage),
"Meta" => o.one(d, key).map(Self::Meta),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::Base64Binary(v) => w.prim_value(&choice_key(base, "base64Binary"), v),
Self::Boolean(v) => w.prim_value(&choice_key(base, "boolean"), v),
Self::Canonical(v) => w.prim_value(&choice_key(base, "canonical"), v),
Self::Code(v) => w.prim_value(&choice_key(base, "code"), v),
Self::Date(v) => w.prim_value(&choice_key(base, "date"), v),
Self::DateTime(v) => w.prim_value(&choice_key(base, "dateTime"), v),
Self::Decimal(v) => w.prim_value(&choice_key(base, "decimal"), v),
Self::Id(v) => w.prim_value(&choice_key(base, "id"), v),
Self::Instant(v) => w.prim_value(&choice_key(base, "instant"), v),
Self::Integer(v) => w.prim_value(&choice_key(base, "integer"), v),
Self::Markdown(v) => w.prim_value(&choice_key(base, "markdown"), v),
Self::Oid(v) => w.prim_value(&choice_key(base, "oid"), v),
Self::PositiveInt(v) => w.prim_value(&choice_key(base, "positiveInt"), v),
Self::String(v) => w.prim_value(&choice_key(base, "string"), v),
Self::Time(v) => w.prim_value(&choice_key(base, "time"), v),
Self::UnsignedInt(v) => w.prim_value(&choice_key(base, "unsignedInt"), v),
Self::Uri(v) => w.prim_value(&choice_key(base, "uri"), v),
Self::Url(v) => w.prim_value(&choice_key(base, "url"), v),
Self::Uuid(v) => w.prim_value(&choice_key(base, "uuid"), v),
Self::Address(v) => w.value(&choice_key(base, "Address"), v),
Self::Age(v) => w.value(&choice_key(base, "Age"), v),
Self::Annotation(v) => w.value(&choice_key(base, "Annotation"), v),
Self::Attachment(v) => w.value(&choice_key(base, "Attachment"), v),
Self::CodeableConcept(v) => w.value(&choice_key(base, "CodeableConcept"), v),
Self::Coding(v) => w.value(&choice_key(base, "Coding"), v),
Self::ContactPoint(v) => w.value(&choice_key(base, "ContactPoint"), v),
Self::Count(v) => w.value(&choice_key(base, "Count"), v),
Self::Distance(v) => w.value(&choice_key(base, "Distance"), v),
Self::Duration(v) => w.value(&choice_key(base, "Duration"), v),
Self::HumanName(v) => w.value(&choice_key(base, "HumanName"), v),
Self::Identifier(v) => w.value(&choice_key(base, "Identifier"), v),
Self::Money(v) => w.value(&choice_key(base, "Money"), v),
Self::Period(v) => w.value(&choice_key(base, "Period"), v),
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::Reference(v) => w.value(&choice_key(base, "Reference"), v),
Self::SampledData(v) => w.value(&choice_key(base, "SampledData"), v),
Self::Signature(v) => w.value(&choice_key(base, "Signature"), v),
Self::Timing(v) => w.value(&choice_key(base, "Timing"), v),
Self::ContactDetail(v) => w.value(&choice_key(base, "ContactDetail"), v),
Self::Contributor(v) => w.value(&choice_key(base, "Contributor"), v),
Self::DataRequirement(v) => w.value(&choice_key(base, "DataRequirement"), v),
Self::Expression(v) => w.value(&choice_key(base, "Expression"), v),
Self::ParameterDefinition(v) => w.value(&choice_key(base, "ParameterDefinition"), v),
Self::RelatedArtifact(v) => w.value(&choice_key(base, "RelatedArtifact"), v),
Self::TriggerDefinition(v) => w.value(&choice_key(base, "TriggerDefinition"), v),
Self::UsageContext(v) => w.value(&choice_key(base, "UsageContext"), v),
Self::Dosage(v) => w.value(&choice_key(base, "Dosage"), v),
Self::Meta(v) => w.value(&choice_key(base, "Meta"), v),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum ElementDefinitionFixed {
Base64Binary(Primitive<String>),
Boolean(Primitive<bool>),
Canonical(Primitive<String>),
Code(Primitive<String>),
Date(Primitive<String>),
DateTime(Primitive<String>),
Decimal(Primitive<Decimal>),
Id(Primitive<String>),
Instant(Primitive<String>),
Integer(Primitive<i32>),
Markdown(Primitive<String>),
Oid(Primitive<String>),
PositiveInt(Primitive<i32>),
String(Primitive<String>),
Time(Primitive<String>),
UnsignedInt(Primitive<i32>),
Uri(Primitive<String>),
Url(Primitive<String>),
Uuid(Primitive<String>),
Address(Address),
Age(Age),
Annotation(Annotation),
Attachment(Attachment),
CodeableConcept(CodeableConcept),
Coding(Coding),
ContactPoint(ContactPoint),
Count(Count),
Distance(Distance),
Duration(Duration),
HumanName(HumanName),
Identifier(Identifier),
Money(Money),
Period(Period),
Quantity(Quantity),
Range(Range),
Ratio(Ratio),
Reference(Reference),
SampledData(SampledData),
Signature(Signature),
Timing(Timing),
ContactDetail(ContactDetail),
Contributor(Contributor),
DataRequirement(DataRequirement),
Expression(Expression),
ParameterDefinition(ParameterDefinition),
RelatedArtifact(RelatedArtifact),
TriggerDefinition(TriggerDefinition),
UsageContext(UsageContext),
Dosage(Dosage),
Meta(Meta),
}
impl Choice for ElementDefinitionFixed {
const TYPES: &'static [&'static str] = &[
"base64Binary",
"boolean",
"canonical",
"code",
"date",
"dateTime",
"decimal",
"id",
"instant",
"integer",
"markdown",
"oid",
"positiveInt",
"string",
"time",
"unsignedInt",
"uri",
"url",
"uuid",
"Address",
"Age",
"Annotation",
"Attachment",
"CodeableConcept",
"Coding",
"ContactPoint",
"Count",
"Distance",
"Duration",
"HumanName",
"Identifier",
"Money",
"Period",
"Quantity",
"Range",
"Ratio",
"Reference",
"SampledData",
"Signature",
"Timing",
"ContactDetail",
"Contributor",
"DataRequirement",
"Expression",
"ParameterDefinition",
"RelatedArtifact",
"TriggerDefinition",
"UsageContext",
"Dosage",
"Meta",
];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"base64Binary" => o.prim(d, key, Kind::Base64Binary).map(Self::Base64Binary),
"boolean" => o.prim(d, key, Kind::Boolean).map(Self::Boolean),
"canonical" => o.prim(d, key, Kind::Canonical).map(Self::Canonical),
"code" => o.prim(d, key, Kind::Code).map(Self::Code),
"date" => o.prim(d, key, Kind::Date).map(Self::Date),
"dateTime" => o.prim(d, key, Kind::DateTime).map(Self::DateTime),
"decimal" => o.prim(d, key, Kind::Decimal).map(Self::Decimal),
"id" => o.prim(d, key, Kind::Id).map(Self::Id),
"instant" => o.prim(d, key, Kind::Instant).map(Self::Instant),
"integer" => o.prim(d, key, Kind::Integer).map(Self::Integer),
"markdown" => o.prim(d, key, Kind::Markdown).map(Self::Markdown),
"oid" => o.prim(d, key, Kind::Oid).map(Self::Oid),
"positiveInt" => o.prim(d, key, Kind::PositiveInt).map(Self::PositiveInt),
"string" => o.prim(d, key, Kind::String).map(Self::String),
"time" => o.prim(d, key, Kind::Time).map(Self::Time),
"unsignedInt" => o.prim(d, key, Kind::UnsignedInt).map(Self::UnsignedInt),
"uri" => o.prim(d, key, Kind::Uri).map(Self::Uri),
"url" => o.prim(d, key, Kind::Url).map(Self::Url),
"uuid" => o.prim(d, key, Kind::Uuid).map(Self::Uuid),
"Address" => o.one(d, key).map(Self::Address),
"Age" => o.one(d, key).map(Self::Age),
"Annotation" => o.one(d, key).map(Self::Annotation),
"Attachment" => o.one(d, key).map(Self::Attachment),
"CodeableConcept" => o.one(d, key).map(Self::CodeableConcept),
"Coding" => o.one(d, key).map(Self::Coding),
"ContactPoint" => o.one(d, key).map(Self::ContactPoint),
"Count" => o.one(d, key).map(Self::Count),
"Distance" => o.one(d, key).map(Self::Distance),
"Duration" => o.one(d, key).map(Self::Duration),
"HumanName" => o.one(d, key).map(Self::HumanName),
"Identifier" => o.one(d, key).map(Self::Identifier),
"Money" => o.one(d, key).map(Self::Money),
"Period" => o.one(d, key).map(Self::Period),
"Quantity" => o.one(d, key).map(Self::Quantity),
"Range" => o.one(d, key).map(Self::Range),
"Ratio" => o.one(d, key).map(Self::Ratio),
"Reference" => o.one(d, key).map(Self::Reference),
"SampledData" => o.one(d, key).map(Self::SampledData),
"Signature" => o.one(d, key).map(Self::Signature),
"Timing" => o.one(d, key).map(Self::Timing),
"ContactDetail" => o.one(d, key).map(Self::ContactDetail),
"Contributor" => o.one(d, key).map(Self::Contributor),
"DataRequirement" => o.one(d, key).map(Self::DataRequirement),
"Expression" => o.one(d, key).map(Self::Expression),
"ParameterDefinition" => o.one(d, key).map(Self::ParameterDefinition),
"RelatedArtifact" => o.one(d, key).map(Self::RelatedArtifact),
"TriggerDefinition" => o.one(d, key).map(Self::TriggerDefinition),
"UsageContext" => o.one(d, key).map(Self::UsageContext),
"Dosage" => o.one(d, key).map(Self::Dosage),
"Meta" => o.one(d, key).map(Self::Meta),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::Base64Binary(v) => w.prim_value(&choice_key(base, "base64Binary"), v),
Self::Boolean(v) => w.prim_value(&choice_key(base, "boolean"), v),
Self::Canonical(v) => w.prim_value(&choice_key(base, "canonical"), v),
Self::Code(v) => w.prim_value(&choice_key(base, "code"), v),
Self::Date(v) => w.prim_value(&choice_key(base, "date"), v),
Self::DateTime(v) => w.prim_value(&choice_key(base, "dateTime"), v),
Self::Decimal(v) => w.prim_value(&choice_key(base, "decimal"), v),
Self::Id(v) => w.prim_value(&choice_key(base, "id"), v),
Self::Instant(v) => w.prim_value(&choice_key(base, "instant"), v),
Self::Integer(v) => w.prim_value(&choice_key(base, "integer"), v),
Self::Markdown(v) => w.prim_value(&choice_key(base, "markdown"), v),
Self::Oid(v) => w.prim_value(&choice_key(base, "oid"), v),
Self::PositiveInt(v) => w.prim_value(&choice_key(base, "positiveInt"), v),
Self::String(v) => w.prim_value(&choice_key(base, "string"), v),
Self::Time(v) => w.prim_value(&choice_key(base, "time"), v),
Self::UnsignedInt(v) => w.prim_value(&choice_key(base, "unsignedInt"), v),
Self::Uri(v) => w.prim_value(&choice_key(base, "uri"), v),
Self::Url(v) => w.prim_value(&choice_key(base, "url"), v),
Self::Uuid(v) => w.prim_value(&choice_key(base, "uuid"), v),
Self::Address(v) => w.value(&choice_key(base, "Address"), v),
Self::Age(v) => w.value(&choice_key(base, "Age"), v),
Self::Annotation(v) => w.value(&choice_key(base, "Annotation"), v),
Self::Attachment(v) => w.value(&choice_key(base, "Attachment"), v),
Self::CodeableConcept(v) => w.value(&choice_key(base, "CodeableConcept"), v),
Self::Coding(v) => w.value(&choice_key(base, "Coding"), v),
Self::ContactPoint(v) => w.value(&choice_key(base, "ContactPoint"), v),
Self::Count(v) => w.value(&choice_key(base, "Count"), v),
Self::Distance(v) => w.value(&choice_key(base, "Distance"), v),
Self::Duration(v) => w.value(&choice_key(base, "Duration"), v),
Self::HumanName(v) => w.value(&choice_key(base, "HumanName"), v),
Self::Identifier(v) => w.value(&choice_key(base, "Identifier"), v),
Self::Money(v) => w.value(&choice_key(base, "Money"), v),
Self::Period(v) => w.value(&choice_key(base, "Period"), v),
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::Reference(v) => w.value(&choice_key(base, "Reference"), v),
Self::SampledData(v) => w.value(&choice_key(base, "SampledData"), v),
Self::Signature(v) => w.value(&choice_key(base, "Signature"), v),
Self::Timing(v) => w.value(&choice_key(base, "Timing"), v),
Self::ContactDetail(v) => w.value(&choice_key(base, "ContactDetail"), v),
Self::Contributor(v) => w.value(&choice_key(base, "Contributor"), v),
Self::DataRequirement(v) => w.value(&choice_key(base, "DataRequirement"), v),
Self::Expression(v) => w.value(&choice_key(base, "Expression"), v),
Self::ParameterDefinition(v) => w.value(&choice_key(base, "ParameterDefinition"), v),
Self::RelatedArtifact(v) => w.value(&choice_key(base, "RelatedArtifact"), v),
Self::TriggerDefinition(v) => w.value(&choice_key(base, "TriggerDefinition"), v),
Self::UsageContext(v) => w.value(&choice_key(base, "UsageContext"), v),
Self::Dosage(v) => w.value(&choice_key(base, "Dosage"), v),
Self::Meta(v) => w.value(&choice_key(base, "Meta"), v),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum ElementDefinitionPattern {
Base64Binary(Primitive<String>),
Boolean(Primitive<bool>),
Canonical(Primitive<String>),
Code(Primitive<String>),
Date(Primitive<String>),
DateTime(Primitive<String>),
Decimal(Primitive<Decimal>),
Id(Primitive<String>),
Instant(Primitive<String>),
Integer(Primitive<i32>),
Markdown(Primitive<String>),
Oid(Primitive<String>),
PositiveInt(Primitive<i32>),
String(Primitive<String>),
Time(Primitive<String>),
UnsignedInt(Primitive<i32>),
Uri(Primitive<String>),
Url(Primitive<String>),
Uuid(Primitive<String>),
Address(Address),
Age(Age),
Annotation(Annotation),
Attachment(Attachment),
CodeableConcept(CodeableConcept),
Coding(Coding),
ContactPoint(ContactPoint),
Count(Count),
Distance(Distance),
Duration(Duration),
HumanName(HumanName),
Identifier(Identifier),
Money(Money),
Period(Period),
Quantity(Quantity),
Range(Range),
Ratio(Ratio),
Reference(Reference),
SampledData(SampledData),
Signature(Signature),
Timing(Timing),
ContactDetail(ContactDetail),
Contributor(Contributor),
DataRequirement(DataRequirement),
Expression(Expression),
ParameterDefinition(ParameterDefinition),
RelatedArtifact(RelatedArtifact),
TriggerDefinition(TriggerDefinition),
UsageContext(UsageContext),
Dosage(Dosage),
Meta(Meta),
}
impl Choice for ElementDefinitionPattern {
const TYPES: &'static [&'static str] = &[
"base64Binary",
"boolean",
"canonical",
"code",
"date",
"dateTime",
"decimal",
"id",
"instant",
"integer",
"markdown",
"oid",
"positiveInt",
"string",
"time",
"unsignedInt",
"uri",
"url",
"uuid",
"Address",
"Age",
"Annotation",
"Attachment",
"CodeableConcept",
"Coding",
"ContactPoint",
"Count",
"Distance",
"Duration",
"HumanName",
"Identifier",
"Money",
"Period",
"Quantity",
"Range",
"Ratio",
"Reference",
"SampledData",
"Signature",
"Timing",
"ContactDetail",
"Contributor",
"DataRequirement",
"Expression",
"ParameterDefinition",
"RelatedArtifact",
"TriggerDefinition",
"UsageContext",
"Dosage",
"Meta",
];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"base64Binary" => o.prim(d, key, Kind::Base64Binary).map(Self::Base64Binary),
"boolean" => o.prim(d, key, Kind::Boolean).map(Self::Boolean),
"canonical" => o.prim(d, key, Kind::Canonical).map(Self::Canonical),
"code" => o.prim(d, key, Kind::Code).map(Self::Code),
"date" => o.prim(d, key, Kind::Date).map(Self::Date),
"dateTime" => o.prim(d, key, Kind::DateTime).map(Self::DateTime),
"decimal" => o.prim(d, key, Kind::Decimal).map(Self::Decimal),
"id" => o.prim(d, key, Kind::Id).map(Self::Id),
"instant" => o.prim(d, key, Kind::Instant).map(Self::Instant),
"integer" => o.prim(d, key, Kind::Integer).map(Self::Integer),
"markdown" => o.prim(d, key, Kind::Markdown).map(Self::Markdown),
"oid" => o.prim(d, key, Kind::Oid).map(Self::Oid),
"positiveInt" => o.prim(d, key, Kind::PositiveInt).map(Self::PositiveInt),
"string" => o.prim(d, key, Kind::String).map(Self::String),
"time" => o.prim(d, key, Kind::Time).map(Self::Time),
"unsignedInt" => o.prim(d, key, Kind::UnsignedInt).map(Self::UnsignedInt),
"uri" => o.prim(d, key, Kind::Uri).map(Self::Uri),
"url" => o.prim(d, key, Kind::Url).map(Self::Url),
"uuid" => o.prim(d, key, Kind::Uuid).map(Self::Uuid),
"Address" => o.one(d, key).map(Self::Address),
"Age" => o.one(d, key).map(Self::Age),
"Annotation" => o.one(d, key).map(Self::Annotation),
"Attachment" => o.one(d, key).map(Self::Attachment),
"CodeableConcept" => o.one(d, key).map(Self::CodeableConcept),
"Coding" => o.one(d, key).map(Self::Coding),
"ContactPoint" => o.one(d, key).map(Self::ContactPoint),
"Count" => o.one(d, key).map(Self::Count),
"Distance" => o.one(d, key).map(Self::Distance),
"Duration" => o.one(d, key).map(Self::Duration),
"HumanName" => o.one(d, key).map(Self::HumanName),
"Identifier" => o.one(d, key).map(Self::Identifier),
"Money" => o.one(d, key).map(Self::Money),
"Period" => o.one(d, key).map(Self::Period),
"Quantity" => o.one(d, key).map(Self::Quantity),
"Range" => o.one(d, key).map(Self::Range),
"Ratio" => o.one(d, key).map(Self::Ratio),
"Reference" => o.one(d, key).map(Self::Reference),
"SampledData" => o.one(d, key).map(Self::SampledData),
"Signature" => o.one(d, key).map(Self::Signature),
"Timing" => o.one(d, key).map(Self::Timing),
"ContactDetail" => o.one(d, key).map(Self::ContactDetail),
"Contributor" => o.one(d, key).map(Self::Contributor),
"DataRequirement" => o.one(d, key).map(Self::DataRequirement),
"Expression" => o.one(d, key).map(Self::Expression),
"ParameterDefinition" => o.one(d, key).map(Self::ParameterDefinition),
"RelatedArtifact" => o.one(d, key).map(Self::RelatedArtifact),
"TriggerDefinition" => o.one(d, key).map(Self::TriggerDefinition),
"UsageContext" => o.one(d, key).map(Self::UsageContext),
"Dosage" => o.one(d, key).map(Self::Dosage),
"Meta" => o.one(d, key).map(Self::Meta),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::Base64Binary(v) => w.prim_value(&choice_key(base, "base64Binary"), v),
Self::Boolean(v) => w.prim_value(&choice_key(base, "boolean"), v),
Self::Canonical(v) => w.prim_value(&choice_key(base, "canonical"), v),
Self::Code(v) => w.prim_value(&choice_key(base, "code"), v),
Self::Date(v) => w.prim_value(&choice_key(base, "date"), v),
Self::DateTime(v) => w.prim_value(&choice_key(base, "dateTime"), v),
Self::Decimal(v) => w.prim_value(&choice_key(base, "decimal"), v),
Self::Id(v) => w.prim_value(&choice_key(base, "id"), v),
Self::Instant(v) => w.prim_value(&choice_key(base, "instant"), v),
Self::Integer(v) => w.prim_value(&choice_key(base, "integer"), v),
Self::Markdown(v) => w.prim_value(&choice_key(base, "markdown"), v),
Self::Oid(v) => w.prim_value(&choice_key(base, "oid"), v),
Self::PositiveInt(v) => w.prim_value(&choice_key(base, "positiveInt"), v),
Self::String(v) => w.prim_value(&choice_key(base, "string"), v),
Self::Time(v) => w.prim_value(&choice_key(base, "time"), v),
Self::UnsignedInt(v) => w.prim_value(&choice_key(base, "unsignedInt"), v),
Self::Uri(v) => w.prim_value(&choice_key(base, "uri"), v),
Self::Url(v) => w.prim_value(&choice_key(base, "url"), v),
Self::Uuid(v) => w.prim_value(&choice_key(base, "uuid"), v),
Self::Address(v) => w.value(&choice_key(base, "Address"), v),
Self::Age(v) => w.value(&choice_key(base, "Age"), v),
Self::Annotation(v) => w.value(&choice_key(base, "Annotation"), v),
Self::Attachment(v) => w.value(&choice_key(base, "Attachment"), v),
Self::CodeableConcept(v) => w.value(&choice_key(base, "CodeableConcept"), v),
Self::Coding(v) => w.value(&choice_key(base, "Coding"), v),
Self::ContactPoint(v) => w.value(&choice_key(base, "ContactPoint"), v),
Self::Count(v) => w.value(&choice_key(base, "Count"), v),
Self::Distance(v) => w.value(&choice_key(base, "Distance"), v),
Self::Duration(v) => w.value(&choice_key(base, "Duration"), v),
Self::HumanName(v) => w.value(&choice_key(base, "HumanName"), v),
Self::Identifier(v) => w.value(&choice_key(base, "Identifier"), v),
Self::Money(v) => w.value(&choice_key(base, "Money"), v),
Self::Period(v) => w.value(&choice_key(base, "Period"), v),
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::Reference(v) => w.value(&choice_key(base, "Reference"), v),
Self::SampledData(v) => w.value(&choice_key(base, "SampledData"), v),
Self::Signature(v) => w.value(&choice_key(base, "Signature"), v),
Self::Timing(v) => w.value(&choice_key(base, "Timing"), v),
Self::ContactDetail(v) => w.value(&choice_key(base, "ContactDetail"), v),
Self::Contributor(v) => w.value(&choice_key(base, "Contributor"), v),
Self::DataRequirement(v) => w.value(&choice_key(base, "DataRequirement"), v),
Self::Expression(v) => w.value(&choice_key(base, "Expression"), v),
Self::ParameterDefinition(v) => w.value(&choice_key(base, "ParameterDefinition"), v),
Self::RelatedArtifact(v) => w.value(&choice_key(base, "RelatedArtifact"), v),
Self::TriggerDefinition(v) => w.value(&choice_key(base, "TriggerDefinition"), v),
Self::UsageContext(v) => w.value(&choice_key(base, "UsageContext"), v),
Self::Dosage(v) => w.value(&choice_key(base, "Dosage"), v),
Self::Meta(v) => w.value(&choice_key(base, "Meta"), v),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum ElementDefinitionMinValue {
Date(Primitive<String>),
DateTime(Primitive<String>),
Instant(Primitive<String>),
Time(Primitive<String>),
Decimal(Primitive<Decimal>),
Integer(Primitive<i32>),
PositiveInt(Primitive<i32>),
UnsignedInt(Primitive<i32>),
Quantity(Quantity),
}
impl Choice for ElementDefinitionMinValue {
const TYPES: &'static [&'static str] = &[
"date",
"dateTime",
"instant",
"time",
"decimal",
"integer",
"positiveInt",
"unsignedInt",
"Quantity",
];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"date" => o.prim(d, key, Kind::Date).map(Self::Date),
"dateTime" => o.prim(d, key, Kind::DateTime).map(Self::DateTime),
"instant" => o.prim(d, key, Kind::Instant).map(Self::Instant),
"time" => o.prim(d, key, Kind::Time).map(Self::Time),
"decimal" => o.prim(d, key, Kind::Decimal).map(Self::Decimal),
"integer" => o.prim(d, key, Kind::Integer).map(Self::Integer),
"positiveInt" => o.prim(d, key, Kind::PositiveInt).map(Self::PositiveInt),
"unsignedInt" => o.prim(d, key, Kind::UnsignedInt).map(Self::UnsignedInt),
"Quantity" => o.one(d, key).map(Self::Quantity),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::Date(v) => w.prim_value(&choice_key(base, "date"), v),
Self::DateTime(v) => w.prim_value(&choice_key(base, "dateTime"), v),
Self::Instant(v) => w.prim_value(&choice_key(base, "instant"), v),
Self::Time(v) => w.prim_value(&choice_key(base, "time"), v),
Self::Decimal(v) => w.prim_value(&choice_key(base, "decimal"), v),
Self::Integer(v) => w.prim_value(&choice_key(base, "integer"), v),
Self::PositiveInt(v) => w.prim_value(&choice_key(base, "positiveInt"), v),
Self::UnsignedInt(v) => w.prim_value(&choice_key(base, "unsignedInt"), v),
Self::Quantity(v) => w.value(&choice_key(base, "Quantity"), v),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum ElementDefinitionMaxValue {
Date(Primitive<String>),
DateTime(Primitive<String>),
Instant(Primitive<String>),
Time(Primitive<String>),
Decimal(Primitive<Decimal>),
Integer(Primitive<i32>),
PositiveInt(Primitive<i32>),
UnsignedInt(Primitive<i32>),
Quantity(Quantity),
}
impl Choice for ElementDefinitionMaxValue {
const TYPES: &'static [&'static str] = &[
"date",
"dateTime",
"instant",
"time",
"decimal",
"integer",
"positiveInt",
"unsignedInt",
"Quantity",
];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"date" => o.prim(d, key, Kind::Date).map(Self::Date),
"dateTime" => o.prim(d, key, Kind::DateTime).map(Self::DateTime),
"instant" => o.prim(d, key, Kind::Instant).map(Self::Instant),
"time" => o.prim(d, key, Kind::Time).map(Self::Time),
"decimal" => o.prim(d, key, Kind::Decimal).map(Self::Decimal),
"integer" => o.prim(d, key, Kind::Integer).map(Self::Integer),
"positiveInt" => o.prim(d, key, Kind::PositiveInt).map(Self::PositiveInt),
"unsignedInt" => o.prim(d, key, Kind::UnsignedInt).map(Self::UnsignedInt),
"Quantity" => o.one(d, key).map(Self::Quantity),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::Date(v) => w.prim_value(&choice_key(base, "date"), v),
Self::DateTime(v) => w.prim_value(&choice_key(base, "dateTime"), v),
Self::Instant(v) => w.prim_value(&choice_key(base, "instant"), v),
Self::Time(v) => w.prim_value(&choice_key(base, "time"), v),
Self::Decimal(v) => w.prim_value(&choice_key(base, "decimal"), v),
Self::Integer(v) => w.prim_value(&choice_key(base, "integer"), v),
Self::PositiveInt(v) => w.prim_value(&choice_key(base, "positiveInt"), v),
Self::UnsignedInt(v) => w.prim_value(&choice_key(base, "unsignedInt"), v),
Self::Quantity(v) => w.value(&choice_key(base, "Quantity"), v),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum ElementDefinitionExampleValue {
Base64Binary(Primitive<String>),
Boolean(Primitive<bool>),
Canonical(Primitive<String>),
Code(Primitive<String>),
Date(Primitive<String>),
DateTime(Primitive<String>),
Decimal(Primitive<Decimal>),
Id(Primitive<String>),
Instant(Primitive<String>),
Integer(Primitive<i32>),
Markdown(Primitive<String>),
Oid(Primitive<String>),
PositiveInt(Primitive<i32>),
String(Primitive<String>),
Time(Primitive<String>),
UnsignedInt(Primitive<i32>),
Uri(Primitive<String>),
Url(Primitive<String>),
Uuid(Primitive<String>),
Address(Address),
Age(Age),
Annotation(Annotation),
Attachment(Attachment),
CodeableConcept(CodeableConcept),
Coding(Coding),
ContactPoint(ContactPoint),
Count(Count),
Distance(Distance),
Duration(Duration),
HumanName(HumanName),
Identifier(Identifier),
Money(Money),
Period(Period),
Quantity(Quantity),
Range(Range),
Ratio(Ratio),
Reference(Reference),
SampledData(SampledData),
Signature(Signature),
Timing(Timing),
ContactDetail(ContactDetail),
Contributor(Contributor),
DataRequirement(DataRequirement),
Expression(Expression),
ParameterDefinition(ParameterDefinition),
RelatedArtifact(RelatedArtifact),
TriggerDefinition(TriggerDefinition),
UsageContext(UsageContext),
Dosage(Dosage),
Meta(Meta),
}
impl Choice for ElementDefinitionExampleValue {
const TYPES: &'static [&'static str] = &[
"base64Binary",
"boolean",
"canonical",
"code",
"date",
"dateTime",
"decimal",
"id",
"instant",
"integer",
"markdown",
"oid",
"positiveInt",
"string",
"time",
"unsignedInt",
"uri",
"url",
"uuid",
"Address",
"Age",
"Annotation",
"Attachment",
"CodeableConcept",
"Coding",
"ContactPoint",
"Count",
"Distance",
"Duration",
"HumanName",
"Identifier",
"Money",
"Period",
"Quantity",
"Range",
"Ratio",
"Reference",
"SampledData",
"Signature",
"Timing",
"ContactDetail",
"Contributor",
"DataRequirement",
"Expression",
"ParameterDefinition",
"RelatedArtifact",
"TriggerDefinition",
"UsageContext",
"Dosage",
"Meta",
];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"base64Binary" => o.prim(d, key, Kind::Base64Binary).map(Self::Base64Binary),
"boolean" => o.prim(d, key, Kind::Boolean).map(Self::Boolean),
"canonical" => o.prim(d, key, Kind::Canonical).map(Self::Canonical),
"code" => o.prim(d, key, Kind::Code).map(Self::Code),
"date" => o.prim(d, key, Kind::Date).map(Self::Date),
"dateTime" => o.prim(d, key, Kind::DateTime).map(Self::DateTime),
"decimal" => o.prim(d, key, Kind::Decimal).map(Self::Decimal),
"id" => o.prim(d, key, Kind::Id).map(Self::Id),
"instant" => o.prim(d, key, Kind::Instant).map(Self::Instant),
"integer" => o.prim(d, key, Kind::Integer).map(Self::Integer),
"markdown" => o.prim(d, key, Kind::Markdown).map(Self::Markdown),
"oid" => o.prim(d, key, Kind::Oid).map(Self::Oid),
"positiveInt" => o.prim(d, key, Kind::PositiveInt).map(Self::PositiveInt),
"string" => o.prim(d, key, Kind::String).map(Self::String),
"time" => o.prim(d, key, Kind::Time).map(Self::Time),
"unsignedInt" => o.prim(d, key, Kind::UnsignedInt).map(Self::UnsignedInt),
"uri" => o.prim(d, key, Kind::Uri).map(Self::Uri),
"url" => o.prim(d, key, Kind::Url).map(Self::Url),
"uuid" => o.prim(d, key, Kind::Uuid).map(Self::Uuid),
"Address" => o.one(d, key).map(Self::Address),
"Age" => o.one(d, key).map(Self::Age),
"Annotation" => o.one(d, key).map(Self::Annotation),
"Attachment" => o.one(d, key).map(Self::Attachment),
"CodeableConcept" => o.one(d, key).map(Self::CodeableConcept),
"Coding" => o.one(d, key).map(Self::Coding),
"ContactPoint" => o.one(d, key).map(Self::ContactPoint),
"Count" => o.one(d, key).map(Self::Count),
"Distance" => o.one(d, key).map(Self::Distance),
"Duration" => o.one(d, key).map(Self::Duration),
"HumanName" => o.one(d, key).map(Self::HumanName),
"Identifier" => o.one(d, key).map(Self::Identifier),
"Money" => o.one(d, key).map(Self::Money),
"Period" => o.one(d, key).map(Self::Period),
"Quantity" => o.one(d, key).map(Self::Quantity),
"Range" => o.one(d, key).map(Self::Range),
"Ratio" => o.one(d, key).map(Self::Ratio),
"Reference" => o.one(d, key).map(Self::Reference),
"SampledData" => o.one(d, key).map(Self::SampledData),
"Signature" => o.one(d, key).map(Self::Signature),
"Timing" => o.one(d, key).map(Self::Timing),
"ContactDetail" => o.one(d, key).map(Self::ContactDetail),
"Contributor" => o.one(d, key).map(Self::Contributor),
"DataRequirement" => o.one(d, key).map(Self::DataRequirement),
"Expression" => o.one(d, key).map(Self::Expression),
"ParameterDefinition" => o.one(d, key).map(Self::ParameterDefinition),
"RelatedArtifact" => o.one(d, key).map(Self::RelatedArtifact),
"TriggerDefinition" => o.one(d, key).map(Self::TriggerDefinition),
"UsageContext" => o.one(d, key).map(Self::UsageContext),
"Dosage" => o.one(d, key).map(Self::Dosage),
"Meta" => o.one(d, key).map(Self::Meta),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::Base64Binary(v) => w.prim_value(&choice_key(base, "base64Binary"), v),
Self::Boolean(v) => w.prim_value(&choice_key(base, "boolean"), v),
Self::Canonical(v) => w.prim_value(&choice_key(base, "canonical"), v),
Self::Code(v) => w.prim_value(&choice_key(base, "code"), v),
Self::Date(v) => w.prim_value(&choice_key(base, "date"), v),
Self::DateTime(v) => w.prim_value(&choice_key(base, "dateTime"), v),
Self::Decimal(v) => w.prim_value(&choice_key(base, "decimal"), v),
Self::Id(v) => w.prim_value(&choice_key(base, "id"), v),
Self::Instant(v) => w.prim_value(&choice_key(base, "instant"), v),
Self::Integer(v) => w.prim_value(&choice_key(base, "integer"), v),
Self::Markdown(v) => w.prim_value(&choice_key(base, "markdown"), v),
Self::Oid(v) => w.prim_value(&choice_key(base, "oid"), v),
Self::PositiveInt(v) => w.prim_value(&choice_key(base, "positiveInt"), v),
Self::String(v) => w.prim_value(&choice_key(base, "string"), v),
Self::Time(v) => w.prim_value(&choice_key(base, "time"), v),
Self::UnsignedInt(v) => w.prim_value(&choice_key(base, "unsignedInt"), v),
Self::Uri(v) => w.prim_value(&choice_key(base, "uri"), v),
Self::Url(v) => w.prim_value(&choice_key(base, "url"), v),
Self::Uuid(v) => w.prim_value(&choice_key(base, "uuid"), v),
Self::Address(v) => w.value(&choice_key(base, "Address"), v),
Self::Age(v) => w.value(&choice_key(base, "Age"), v),
Self::Annotation(v) => w.value(&choice_key(base, "Annotation"), v),
Self::Attachment(v) => w.value(&choice_key(base, "Attachment"), v),
Self::CodeableConcept(v) => w.value(&choice_key(base, "CodeableConcept"), v),
Self::Coding(v) => w.value(&choice_key(base, "Coding"), v),
Self::ContactPoint(v) => w.value(&choice_key(base, "ContactPoint"), v),
Self::Count(v) => w.value(&choice_key(base, "Count"), v),
Self::Distance(v) => w.value(&choice_key(base, "Distance"), v),
Self::Duration(v) => w.value(&choice_key(base, "Duration"), v),
Self::HumanName(v) => w.value(&choice_key(base, "HumanName"), v),
Self::Identifier(v) => w.value(&choice_key(base, "Identifier"), v),
Self::Money(v) => w.value(&choice_key(base, "Money"), v),
Self::Period(v) => w.value(&choice_key(base, "Period"), v),
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::Reference(v) => w.value(&choice_key(base, "Reference"), v),
Self::SampledData(v) => w.value(&choice_key(base, "SampledData"), v),
Self::Signature(v) => w.value(&choice_key(base, "Signature"), v),
Self::Timing(v) => w.value(&choice_key(base, "Timing"), v),
Self::ContactDetail(v) => w.value(&choice_key(base, "ContactDetail"), v),
Self::Contributor(v) => w.value(&choice_key(base, "Contributor"), v),
Self::DataRequirement(v) => w.value(&choice_key(base, "DataRequirement"), v),
Self::Expression(v) => w.value(&choice_key(base, "Expression"), v),
Self::ParameterDefinition(v) => w.value(&choice_key(base, "ParameterDefinition"), v),
Self::RelatedArtifact(v) => w.value(&choice_key(base, "RelatedArtifact"), v),
Self::TriggerDefinition(v) => w.value(&choice_key(base, "TriggerDefinition"), v),
Self::UsageContext(v) => w.value(&choice_key(base, "UsageContext"), v),
Self::Dosage(v) => w.value(&choice_key(base, "Dosage"), v),
Self::Meta(v) => w.value(&choice_key(base, "Meta"), v),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum ExtensionValue {
Base64Binary(Primitive<String>),
Boolean(Primitive<bool>),
Canonical(Primitive<String>),
Code(Primitive<String>),
Date(Primitive<String>),
DateTime(Primitive<String>),
Decimal(Primitive<Decimal>),
Id(Primitive<String>),
Instant(Primitive<String>),
Integer(Primitive<i32>),
Markdown(Primitive<String>),
Oid(Primitive<String>),
PositiveInt(Primitive<i32>),
String(Primitive<String>),
Time(Primitive<String>),
UnsignedInt(Primitive<i32>),
Uri(Primitive<String>),
Url(Primitive<String>),
Uuid(Primitive<String>),
Address(Address),
Age(Age),
Annotation(Annotation),
Attachment(Attachment),
CodeableConcept(CodeableConcept),
Coding(Coding),
ContactPoint(ContactPoint),
Count(Count),
Distance(Distance),
Duration(Duration),
HumanName(HumanName),
Identifier(Identifier),
Money(Money),
Period(Period),
Quantity(Quantity),
Range(Range),
Ratio(Ratio),
Reference(Reference),
SampledData(SampledData),
Signature(Signature),
Timing(Timing),
ContactDetail(ContactDetail),
Contributor(Contributor),
DataRequirement(DataRequirement),
Expression(Expression),
ParameterDefinition(ParameterDefinition),
RelatedArtifact(RelatedArtifact),
TriggerDefinition(TriggerDefinition),
UsageContext(UsageContext),
Dosage(Dosage),
Meta(Meta),
}
impl Choice for ExtensionValue {
const TYPES: &'static [&'static str] = &[
"base64Binary",
"boolean",
"canonical",
"code",
"date",
"dateTime",
"decimal",
"id",
"instant",
"integer",
"markdown",
"oid",
"positiveInt",
"string",
"time",
"unsignedInt",
"uri",
"url",
"uuid",
"Address",
"Age",
"Annotation",
"Attachment",
"CodeableConcept",
"Coding",
"ContactPoint",
"Count",
"Distance",
"Duration",
"HumanName",
"Identifier",
"Money",
"Period",
"Quantity",
"Range",
"Ratio",
"Reference",
"SampledData",
"Signature",
"Timing",
"ContactDetail",
"Contributor",
"DataRequirement",
"Expression",
"ParameterDefinition",
"RelatedArtifact",
"TriggerDefinition",
"UsageContext",
"Dosage",
"Meta",
];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"base64Binary" => o.prim(d, key, Kind::Base64Binary).map(Self::Base64Binary),
"boolean" => o.prim(d, key, Kind::Boolean).map(Self::Boolean),
"canonical" => o.prim(d, key, Kind::Canonical).map(Self::Canonical),
"code" => o.prim(d, key, Kind::Code).map(Self::Code),
"date" => o.prim(d, key, Kind::Date).map(Self::Date),
"dateTime" => o.prim(d, key, Kind::DateTime).map(Self::DateTime),
"decimal" => o.prim(d, key, Kind::Decimal).map(Self::Decimal),
"id" => o.prim(d, key, Kind::Id).map(Self::Id),
"instant" => o.prim(d, key, Kind::Instant).map(Self::Instant),
"integer" => o.prim(d, key, Kind::Integer).map(Self::Integer),
"markdown" => o.prim(d, key, Kind::Markdown).map(Self::Markdown),
"oid" => o.prim(d, key, Kind::Oid).map(Self::Oid),
"positiveInt" => o.prim(d, key, Kind::PositiveInt).map(Self::PositiveInt),
"string" => o.prim(d, key, Kind::String).map(Self::String),
"time" => o.prim(d, key, Kind::Time).map(Self::Time),
"unsignedInt" => o.prim(d, key, Kind::UnsignedInt).map(Self::UnsignedInt),
"uri" => o.prim(d, key, Kind::Uri).map(Self::Uri),
"url" => o.prim(d, key, Kind::Url).map(Self::Url),
"uuid" => o.prim(d, key, Kind::Uuid).map(Self::Uuid),
"Address" => o.one(d, key).map(Self::Address),
"Age" => o.one(d, key).map(Self::Age),
"Annotation" => o.one(d, key).map(Self::Annotation),
"Attachment" => o.one(d, key).map(Self::Attachment),
"CodeableConcept" => o.one(d, key).map(Self::CodeableConcept),
"Coding" => o.one(d, key).map(Self::Coding),
"ContactPoint" => o.one(d, key).map(Self::ContactPoint),
"Count" => o.one(d, key).map(Self::Count),
"Distance" => o.one(d, key).map(Self::Distance),
"Duration" => o.one(d, key).map(Self::Duration),
"HumanName" => o.one(d, key).map(Self::HumanName),
"Identifier" => o.one(d, key).map(Self::Identifier),
"Money" => o.one(d, key).map(Self::Money),
"Period" => o.one(d, key).map(Self::Period),
"Quantity" => o.one(d, key).map(Self::Quantity),
"Range" => o.one(d, key).map(Self::Range),
"Ratio" => o.one(d, key).map(Self::Ratio),
"Reference" => o.one(d, key).map(Self::Reference),
"SampledData" => o.one(d, key).map(Self::SampledData),
"Signature" => o.one(d, key).map(Self::Signature),
"Timing" => o.one(d, key).map(Self::Timing),
"ContactDetail" => o.one(d, key).map(Self::ContactDetail),
"Contributor" => o.one(d, key).map(Self::Contributor),
"DataRequirement" => o.one(d, key).map(Self::DataRequirement),
"Expression" => o.one(d, key).map(Self::Expression),
"ParameterDefinition" => o.one(d, key).map(Self::ParameterDefinition),
"RelatedArtifact" => o.one(d, key).map(Self::RelatedArtifact),
"TriggerDefinition" => o.one(d, key).map(Self::TriggerDefinition),
"UsageContext" => o.one(d, key).map(Self::UsageContext),
"Dosage" => o.one(d, key).map(Self::Dosage),
"Meta" => o.one(d, key).map(Self::Meta),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::Base64Binary(v) => w.prim_value(&choice_key(base, "base64Binary"), v),
Self::Boolean(v) => w.prim_value(&choice_key(base, "boolean"), v),
Self::Canonical(v) => w.prim_value(&choice_key(base, "canonical"), v),
Self::Code(v) => w.prim_value(&choice_key(base, "code"), v),
Self::Date(v) => w.prim_value(&choice_key(base, "date"), v),
Self::DateTime(v) => w.prim_value(&choice_key(base, "dateTime"), v),
Self::Decimal(v) => w.prim_value(&choice_key(base, "decimal"), v),
Self::Id(v) => w.prim_value(&choice_key(base, "id"), v),
Self::Instant(v) => w.prim_value(&choice_key(base, "instant"), v),
Self::Integer(v) => w.prim_value(&choice_key(base, "integer"), v),
Self::Markdown(v) => w.prim_value(&choice_key(base, "markdown"), v),
Self::Oid(v) => w.prim_value(&choice_key(base, "oid"), v),
Self::PositiveInt(v) => w.prim_value(&choice_key(base, "positiveInt"), v),
Self::String(v) => w.prim_value(&choice_key(base, "string"), v),
Self::Time(v) => w.prim_value(&choice_key(base, "time"), v),
Self::UnsignedInt(v) => w.prim_value(&choice_key(base, "unsignedInt"), v),
Self::Uri(v) => w.prim_value(&choice_key(base, "uri"), v),
Self::Url(v) => w.prim_value(&choice_key(base, "url"), v),
Self::Uuid(v) => w.prim_value(&choice_key(base, "uuid"), v),
Self::Address(v) => w.value(&choice_key(base, "Address"), v),
Self::Age(v) => w.value(&choice_key(base, "Age"), v),
Self::Annotation(v) => w.value(&choice_key(base, "Annotation"), v),
Self::Attachment(v) => w.value(&choice_key(base, "Attachment"), v),
Self::CodeableConcept(v) => w.value(&choice_key(base, "CodeableConcept"), v),
Self::Coding(v) => w.value(&choice_key(base, "Coding"), v),
Self::ContactPoint(v) => w.value(&choice_key(base, "ContactPoint"), v),
Self::Count(v) => w.value(&choice_key(base, "Count"), v),
Self::Distance(v) => w.value(&choice_key(base, "Distance"), v),
Self::Duration(v) => w.value(&choice_key(base, "Duration"), v),
Self::HumanName(v) => w.value(&choice_key(base, "HumanName"), v),
Self::Identifier(v) => w.value(&choice_key(base, "Identifier"), v),
Self::Money(v) => w.value(&choice_key(base, "Money"), v),
Self::Period(v) => w.value(&choice_key(base, "Period"), v),
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::Reference(v) => w.value(&choice_key(base, "Reference"), v),
Self::SampledData(v) => w.value(&choice_key(base, "SampledData"), v),
Self::Signature(v) => w.value(&choice_key(base, "Signature"), v),
Self::Timing(v) => w.value(&choice_key(base, "Timing"), v),
Self::ContactDetail(v) => w.value(&choice_key(base, "ContactDetail"), v),
Self::Contributor(v) => w.value(&choice_key(base, "Contributor"), v),
Self::DataRequirement(v) => w.value(&choice_key(base, "DataRequirement"), v),
Self::Expression(v) => w.value(&choice_key(base, "Expression"), v),
Self::ParameterDefinition(v) => w.value(&choice_key(base, "ParameterDefinition"), v),
Self::RelatedArtifact(v) => w.value(&choice_key(base, "RelatedArtifact"), v),
Self::TriggerDefinition(v) => w.value(&choice_key(base, "TriggerDefinition"), v),
Self::UsageContext(v) => w.value(&choice_key(base, "UsageContext"), v),
Self::Dosage(v) => w.value(&choice_key(base, "Dosage"), v),
Self::Meta(v) => w.value(&choice_key(base, "Meta"), v),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum PopulationAge {
Range(Range),
CodeableConcept(CodeableConcept),
}
impl Choice for PopulationAge {
const TYPES: &'static [&'static str] = &["Range", "CodeableConcept"];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"Range" => o.one(d, key).map(Self::Range),
"CodeableConcept" => o.one(d, key).map(Self::CodeableConcept),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::Range(v) => w.value(&choice_key(base, "Range"), v),
Self::CodeableConcept(v) => w.value(&choice_key(base, "CodeableConcept"), v),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum SubstanceAmountAmount {
Quantity(Quantity),
Range(Range),
String(Primitive<String>),
}
impl Choice for SubstanceAmountAmount {
const TYPES: &'static [&'static str] = &["Quantity", "Range", "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),
"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::String(v) => w.prim_value(&choice_key(base, "string"), v),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum TimingRepeatBounds {
Duration(Duration),
Range(Range),
Period(Period),
}
impl Choice for TimingRepeatBounds {
const TYPES: &'static [&'static str] = &["Duration", "Range", "Period"];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"Duration" => o.one(d, key).map(Self::Duration),
"Range" => o.one(d, key).map(Self::Range),
"Period" => o.one(d, key).map(Self::Period),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::Duration(v) => w.value(&choice_key(base, "Duration"), v),
Self::Range(v) => w.value(&choice_key(base, "Range"), v),
Self::Period(v) => w.value(&choice_key(base, "Period"), v),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum TriggerDefinitionTiming {
Timing(Timing),
Reference(Reference),
Date(Primitive<String>),
DateTime(Primitive<String>),
}
impl Choice for TriggerDefinitionTiming {
const TYPES: &'static [&'static str] = &["Timing", "Reference", "date", "dateTime"];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"Timing" => o.one(d, key).map(Self::Timing),
"Reference" => o.one(d, key).map(Self::Reference),
"date" => o.prim(d, key, Kind::Date).map(Self::Date),
"dateTime" => o.prim(d, key, Kind::DateTime).map(Self::DateTime),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::Timing(v) => w.value(&choice_key(base, "Timing"), v),
Self::Reference(v) => w.value(&choice_key(base, "Reference"), v),
Self::Date(v) => w.prim_value(&choice_key(base, "date"), v),
Self::DateTime(v) => w.prim_value(&choice_key(base, "dateTime"), v),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub enum UsageContextValue {
CodeableConcept(CodeableConcept),
Quantity(Quantity),
Range(Range),
Reference(Reference),
}
impl Choice for UsageContextValue {
const TYPES: &'static [&'static str] = &["CodeableConcept", "Quantity", "Range", "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),
"Quantity" => o.one(d, key).map(Self::Quantity),
"Range" => o.one(d, key).map(Self::Range),
"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::Quantity(v) => w.value(&choice_key(base, "Quantity"), v),
Self::Range(v) => w.value(&choice_key(base, "Range"), v),
Self::Reference(v) => w.value(&choice_key(base, "Reference"), v),
}
}
}