#![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 = "financial")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Coverage {
pub id: Option<String>,
pub meta: Option<Meta>,
pub implicit_rules: Option<Primitive<String>>,
pub language: Option<Primitive<String>>,
pub text: Option<Narrative>,
pub contained: Vec<Resource>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub identifier: Vec<Identifier>,
pub status: Option<Primitive<String>>,
pub type_: Option<CodeableConcept>,
pub policy_holder: Option<Reference>,
pub subscriber: Option<Reference>,
pub subscriber_id: Option<Primitive<String>>,
pub beneficiary: Option<Reference>,
pub dependent: Option<Primitive<String>>,
pub relationship: Option<CodeableConcept>,
pub period: Option<Period>,
pub payor: Vec<Reference>,
pub class: Vec<CoverageClass>,
pub order: Option<Primitive<i32>>,
pub network: Option<Primitive<String>>,
pub cost_to_beneficiary: Vec<CoverageCostToBeneficiary>,
pub subrogation: Option<Primitive<bool>>,
pub contract: Vec<Reference>,
}
#[cfg(feature = "financial")]
impl FhirJson for Coverage {
const TYPE_NAME: &'static str = "Coverage";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
resource_type(&mut o, d, "Coverage");
let r = Coverage {
id: o.string(d, "id"),
meta: o.one(d, "meta"),
implicit_rules: o.prim(d, "implicitRules", Kind::Uri),
language: o.prim(d, "language", Kind::Code),
text: o.one(d, "text"),
contained: o.list(d, "contained"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
identifier: o.list(d, "identifier"),
status: o.prim(d, "status", Kind::Code),
type_: o.one(d, "type"),
policy_holder: o.one(d, "policyHolder"),
subscriber: o.one(d, "subscriber"),
subscriber_id: o.prim(d, "subscriberId", Kind::String),
beneficiary: o.one(d, "beneficiary"),
dependent: o.prim(d, "dependent", Kind::String),
relationship: o.one(d, "relationship"),
period: o.one(d, "period"),
payor: o.list(d, "payor"),
class: o.list(d, "class"),
order: o.prim(d, "order", Kind::PositiveInt),
network: o.prim(d, "network", Kind::String),
cost_to_beneficiary: o.list(d, "costToBeneficiary"),
subrogation: o.prim(d, "subrogation", Kind::Boolean),
contract: o.list(d, "contract"),
};
required(d, "status", &r.status);
required(d, "beneficiary", &r.beneficiary);
required_list(d, "payor", &r.payor, 1);
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.raw("resourceType", Json::String("Coverage".into()));
w.string("id", &self.id);
w.one("meta", &self.meta);
w.prim("implicitRules", &self.implicit_rules);
w.prim("language", &self.language);
w.one("text", &self.text);
w.list("contained", &self.contained);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.list("identifier", &self.identifier);
w.prim("status", &self.status);
w.one("type", &self.type_);
w.one("policyHolder", &self.policy_holder);
w.one("subscriber", &self.subscriber);
w.prim("subscriberId", &self.subscriber_id);
w.one("beneficiary", &self.beneficiary);
w.prim("dependent", &self.dependent);
w.one("relationship", &self.relationship);
w.one("period", &self.period);
w.list("payor", &self.payor);
w.list("class", &self.class);
w.prim("order", &self.order);
w.prim("network", &self.network);
w.list("costToBeneficiary", &self.cost_to_beneficiary);
w.prim("subrogation", &self.subrogation);
w.list("contract", &self.contract);
w.finish()
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct CoverageClass {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub type_: Option<CodeableConcept>,
pub value: Option<Primitive<String>>,
pub name: Option<Primitive<String>>,
}
#[cfg(feature = "financial")]
impl FhirJson for CoverageClass {
const TYPE_NAME: &'static str = "CoverageClass";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = CoverageClass {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
type_: o.one(d, "type"),
value: o.prim(d, "value", Kind::String),
name: o.prim(d, "name", Kind::String),
};
required(d, "type", &r.type_);
required(d, "value", &r.value);
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.string("id", &self.id);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.one("type", &self.type_);
w.prim("value", &self.value);
w.prim("name", &self.name);
w.finish()
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct CoverageCostToBeneficiary {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub type_: Option<CodeableConcept>,
pub value: Option<CoverageCostToBeneficiaryValue>,
pub exception: Vec<CoverageCostToBeneficiaryException>,
}
#[cfg(feature = "financial")]
impl FhirJson for CoverageCostToBeneficiary {
const TYPE_NAME: &'static str = "CoverageCostToBeneficiary";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = CoverageCostToBeneficiary {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
type_: o.one(d, "type"),
value: o.choice(d, "value"),
exception: o.list(d, "exception"),
};
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.list("modifierExtension", &self.modifier_extension);
w.one("type", &self.type_);
w.choice("value", &self.value);
w.list("exception", &self.exception);
w.finish()
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct CoverageCostToBeneficiaryException {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub type_: Option<CodeableConcept>,
pub period: Option<Period>,
}
#[cfg(feature = "financial")]
impl FhirJson for CoverageCostToBeneficiaryException {
const TYPE_NAME: &'static str = "CoverageCostToBeneficiaryException";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = CoverageCostToBeneficiaryException {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
type_: o.one(d, "type"),
period: o.one(d, "period"),
};
required(d, "type", &r.type_);
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.string("id", &self.id);
w.list("extension", &self.extension);
w.list("modifierExtension", &self.modifier_extension);
w.one("type", &self.type_);
w.one("period", &self.period);
w.finish()
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq)]
pub enum CoverageCostToBeneficiaryValue {
Quantity(Quantity),
Money(Money),
}
#[cfg(feature = "financial")]
impl Choice for CoverageCostToBeneficiaryValue {
const TYPES: &'static [&'static str] = &["Quantity", "Money"];
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),
"Money" => o.one(d, key).map(Self::Money),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::Quantity(v) => w.value(&choice_key(base, "Quantity"), v),
Self::Money(v) => w.value(&choice_key(base, "Money"), v),
}
}
}