#![allow(
unused_imports,
clippy::large_enum_variant,
clippy::too_many_lines,
clippy::doc_markdown
)]
use crate::decode::{
choice_key, required, required_list, resource_type, Choice, Decoder, FhirJson, Obj, ObjWriter,
};
use crate::json::Json;
use crate::primitive::{Decimal, Kind, Primitive};
use crate::r4::*;
#[cfg(feature = "foundation")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct TerminologyCapabilities {
pub id: Option<String>,
pub meta: Option<Meta>,
pub implicit_rules: Option<Primitive<String>>,
pub language: Option<Primitive<String>>,
pub text: Option<Narrative>,
pub contained: Vec<Resource>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub url: Option<Primitive<String>>,
pub version: Option<Primitive<String>>,
pub name: Option<Primitive<String>>,
pub title: Option<Primitive<String>>,
pub status: Option<Primitive<String>>,
pub experimental: Option<Primitive<bool>>,
pub date: Option<Primitive<String>>,
pub publisher: Option<Primitive<String>>,
pub contact: Vec<ContactDetail>,
pub description: Option<Primitive<String>>,
pub use_context: Vec<UsageContext>,
pub jurisdiction: Vec<CodeableConcept>,
pub purpose: Option<Primitive<String>>,
pub copyright: Option<Primitive<String>>,
pub kind: Option<Primitive<String>>,
pub software: Option<TerminologyCapabilitiesSoftware>,
pub implementation: Option<TerminologyCapabilitiesImplementation>,
pub locked_date: Option<Primitive<bool>>,
pub code_system: Vec<TerminologyCapabilitiesCodeSystem>,
pub expansion: Option<TerminologyCapabilitiesExpansion>,
pub code_search: Option<Primitive<String>>,
pub validate_code: Option<TerminologyCapabilitiesValidateCode>,
pub translation: Option<TerminologyCapabilitiesTranslation>,
pub closure: Option<TerminologyCapabilitiesClosure>,
}
#[cfg(feature = "foundation")]
impl FhirJson for TerminologyCapabilities {
const TYPE_NAME: &'static str = "TerminologyCapabilities";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
resource_type(&mut o, d, "TerminologyCapabilities");
let r = TerminologyCapabilities {
id: o.string(d, "id"),
meta: o.one(d, "meta"),
implicit_rules: o.prim(d, "implicitRules", Kind::Uri),
language: o.prim(d, "language", Kind::Code),
text: o.one(d, "text"),
contained: o.list(d, "contained"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
url: o.prim(d, "url", Kind::Uri),
version: o.prim(d, "version", Kind::String),
name: o.prim(d, "name", Kind::String),
title: o.prim(d, "title", Kind::String),
status: o.prim(d, "status", Kind::Code),
experimental: o.prim(d, "experimental", Kind::Boolean),
date: o.prim(d, "date", Kind::DateTime),
publisher: o.prim(d, "publisher", Kind::String),
contact: o.list(d, "contact"),
description: o.prim(d, "description", Kind::Markdown),
use_context: o.list(d, "useContext"),
jurisdiction: o.list(d, "jurisdiction"),
purpose: o.prim(d, "purpose", Kind::Markdown),
copyright: o.prim(d, "copyright", Kind::Markdown),
kind: o.prim(d, "kind", Kind::Code),
software: o.one(d, "software"),
implementation: o.one(d, "implementation"),
locked_date: o.prim(d, "lockedDate", Kind::Boolean),
code_system: o.list(d, "codeSystem"),
expansion: o.one(d, "expansion"),
code_search: o.prim(d, "codeSearch", Kind::Code),
validate_code: o.one(d, "validateCode"),
translation: o.one(d, "translation"),
closure: o.one(d, "closure"),
};
required(d, "status", &r.status);
required(d, "date", &r.date);
required(d, "kind", &r.kind);
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.raw(
"resourceType",
Json::String("TerminologyCapabilities".into()),
);
w.string("id", &self.id);
w.one("meta", &self.meta);
w.prim("implicitRules", &self.implicit_rules);
w.prim("language", &self.language);
w.one("text", &self.text);
w.list("contained", &self.contained);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.prim("url", &self.url);
w.prim("version", &self.version);
w.prim("name", &self.name);
w.prim("title", &self.title);
w.prim("status", &self.status);
w.prim("experimental", &self.experimental);
w.prim("date", &self.date);
w.prim("publisher", &self.publisher);
w.list("contact", &self.contact);
w.prim("description", &self.description);
w.list("useContext", &self.use_context);
w.list("jurisdiction", &self.jurisdiction);
w.prim("purpose", &self.purpose);
w.prim("copyright", &self.copyright);
w.prim("kind", &self.kind);
w.one("software", &self.software);
w.one("implementation", &self.implementation);
w.prim("lockedDate", &self.locked_date);
w.list("codeSystem", &self.code_system);
w.one("expansion", &self.expansion);
w.prim("codeSearch", &self.code_search);
w.one("validateCode", &self.validate_code);
w.one("translation", &self.translation);
w.one("closure", &self.closure);
w.finish()
}
}
#[cfg(feature = "foundation")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct TerminologyCapabilitiesSoftware {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub name: Option<Primitive<String>>,
pub version: Option<Primitive<String>>,
}
#[cfg(feature = "foundation")]
impl FhirJson for TerminologyCapabilitiesSoftware {
const TYPE_NAME: &'static str = "TerminologyCapabilitiesSoftware";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = TerminologyCapabilitiesSoftware {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
name: o.prim(d, "name", Kind::String),
version: o.prim(d, "version", Kind::String),
};
required(d, "name", &r.name);
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.string("id", &self.id);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.prim("name", &self.name);
w.prim("version", &self.version);
w.finish()
}
}
#[cfg(feature = "foundation")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct TerminologyCapabilitiesImplementation {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub description: Option<Primitive<String>>,
pub url: Option<Primitive<String>>,
}
#[cfg(feature = "foundation")]
impl FhirJson for TerminologyCapabilitiesImplementation {
const TYPE_NAME: &'static str = "TerminologyCapabilitiesImplementation";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = TerminologyCapabilitiesImplementation {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
description: o.prim(d, "description", Kind::String),
url: o.prim(d, "url", Kind::Url),
};
required(d, "description", &r.description);
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("description", &self.description);
w.prim("url", &self.url);
w.finish()
}
}
#[cfg(feature = "foundation")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct TerminologyCapabilitiesCodeSystem {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub uri: Option<Primitive<String>>,
pub version: Vec<TerminologyCapabilitiesCodeSystemVersion>,
pub subsumption: Option<Primitive<bool>>,
}
#[cfg(feature = "foundation")]
impl FhirJson for TerminologyCapabilitiesCodeSystem {
const TYPE_NAME: &'static str = "TerminologyCapabilitiesCodeSystem";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = TerminologyCapabilitiesCodeSystem {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
uri: o.prim(d, "uri", Kind::Canonical),
version: o.list(d, "version"),
subsumption: o.prim(d, "subsumption", 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.list("modifierExtension", &self.modifier_extension);
w.prim("uri", &self.uri);
w.list("version", &self.version);
w.prim("subsumption", &self.subsumption);
w.finish()
}
}
#[cfg(feature = "foundation")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct TerminologyCapabilitiesCodeSystemVersion {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub code: Option<Primitive<String>>,
pub is_default: Option<Primitive<bool>>,
pub compositional: Option<Primitive<bool>>,
pub language: Vec<Primitive<String>>,
pub filter: Vec<TerminologyCapabilitiesCodeSystemVersionFilter>,
pub property: Vec<Primitive<String>>,
}
#[cfg(feature = "foundation")]
impl FhirJson for TerminologyCapabilitiesCodeSystemVersion {
const TYPE_NAME: &'static str = "TerminologyCapabilitiesCodeSystemVersion";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = TerminologyCapabilitiesCodeSystemVersion {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
code: o.prim(d, "code", Kind::String),
is_default: o.prim(d, "isDefault", Kind::Boolean),
compositional: o.prim(d, "compositional", Kind::Boolean),
language: o.prim_list(d, "language", Kind::Code),
filter: o.list(d, "filter"),
property: o.prim_list(d, "property", 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.list("modifierExtension", &self.modifier_extension);
w.prim("code", &self.code);
w.prim("isDefault", &self.is_default);
w.prim("compositional", &self.compositional);
w.prim_list("language", &self.language);
w.list("filter", &self.filter);
w.prim_list("property", &self.property);
w.finish()
}
}
#[cfg(feature = "foundation")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct TerminologyCapabilitiesCodeSystemVersionFilter {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub code: Option<Primitive<String>>,
pub op: Vec<Primitive<String>>,
}
#[cfg(feature = "foundation")]
impl FhirJson for TerminologyCapabilitiesCodeSystemVersionFilter {
const TYPE_NAME: &'static str = "TerminologyCapabilitiesCodeSystemVersionFilter";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = TerminologyCapabilitiesCodeSystemVersionFilter {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
code: o.prim(d, "code", Kind::Code),
op: o.prim_list(d, "op", Kind::Code),
};
required(d, "code", &r.code);
required_list(d, "op", &r.op, 1);
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.string("id", &self.id);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.prim("code", &self.code);
w.prim_list("op", &self.op);
w.finish()
}
}
#[cfg(feature = "foundation")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct TerminologyCapabilitiesExpansion {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub hierarchical: Option<Primitive<bool>>,
pub paging: Option<Primitive<bool>>,
pub incomplete: Option<Primitive<bool>>,
pub parameter: Vec<TerminologyCapabilitiesExpansionParameter>,
pub text_filter: Option<Primitive<String>>,
}
#[cfg(feature = "foundation")]
impl FhirJson for TerminologyCapabilitiesExpansion {
const TYPE_NAME: &'static str = "TerminologyCapabilitiesExpansion";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = TerminologyCapabilitiesExpansion {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
hierarchical: o.prim(d, "hierarchical", Kind::Boolean),
paging: o.prim(d, "paging", Kind::Boolean),
incomplete: o.prim(d, "incomplete", Kind::Boolean),
parameter: o.list(d, "parameter"),
text_filter: o.prim(d, "textFilter", Kind::Markdown),
};
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("hierarchical", &self.hierarchical);
w.prim("paging", &self.paging);
w.prim("incomplete", &self.incomplete);
w.list("parameter", &self.parameter);
w.prim("textFilter", &self.text_filter);
w.finish()
}
}
#[cfg(feature = "foundation")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct TerminologyCapabilitiesExpansionParameter {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub name: Option<Primitive<String>>,
pub documentation: Option<Primitive<String>>,
}
#[cfg(feature = "foundation")]
impl FhirJson for TerminologyCapabilitiesExpansionParameter {
const TYPE_NAME: &'static str = "TerminologyCapabilitiesExpansionParameter";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = TerminologyCapabilitiesExpansionParameter {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
name: o.prim(d, "name", Kind::Code),
documentation: o.prim(d, "documentation", Kind::String),
};
required(d, "name", &r.name);
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.string("id", &self.id);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.prim("name", &self.name);
w.prim("documentation", &self.documentation);
w.finish()
}
}
#[cfg(feature = "foundation")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct TerminologyCapabilitiesValidateCode {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub translations: Option<Primitive<bool>>,
}
#[cfg(feature = "foundation")]
impl FhirJson for TerminologyCapabilitiesValidateCode {
const TYPE_NAME: &'static str = "TerminologyCapabilitiesValidateCode";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = TerminologyCapabilitiesValidateCode {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
translations: o.prim(d, "translations", Kind::Boolean),
};
required(d, "translations", &r.translations);
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("translations", &self.translations);
w.finish()
}
}
#[cfg(feature = "foundation")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct TerminologyCapabilitiesTranslation {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub needs_map: Option<Primitive<bool>>,
}
#[cfg(feature = "foundation")]
impl FhirJson for TerminologyCapabilitiesTranslation {
const TYPE_NAME: &'static str = "TerminologyCapabilitiesTranslation";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = TerminologyCapabilitiesTranslation {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
needs_map: o.prim(d, "needsMap", Kind::Boolean),
};
required(d, "needsMap", &r.needs_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.list("modifierExtension", &self.modifier_extension);
w.prim("needsMap", &self.needs_map);
w.finish()
}
}
#[cfg(feature = "foundation")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct TerminologyCapabilitiesClosure {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub translation: Option<Primitive<bool>>,
}
#[cfg(feature = "foundation")]
impl FhirJson for TerminologyCapabilitiesClosure {
const TYPE_NAME: &'static str = "TerminologyCapabilitiesClosure";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = TerminologyCapabilitiesClosure {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
translation: o.prim(d, "translation", 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.list("modifierExtension", &self.modifier_extension);
w.prim("translation", &self.translation);
w.finish()
}
}