#![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 CoverageEligibilityResponse {
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 purpose: Vec<Primitive<String>>,
pub patient: Option<Reference>,
pub serviced: Option<CoverageEligibilityResponseServiced>,
pub created: Option<Primitive<String>>,
pub requestor: Option<Reference>,
pub request: Option<Reference>,
pub outcome: Option<Primitive<String>>,
pub disposition: Option<Primitive<String>>,
pub insurer: Option<Reference>,
pub insurance: Vec<CoverageEligibilityResponseInsurance>,
pub pre_auth_ref: Option<Primitive<String>>,
pub form: Option<CodeableConcept>,
pub error: Vec<CoverageEligibilityResponseError>,
}
#[cfg(feature = "financial")]
impl FhirJson for CoverageEligibilityResponse {
const TYPE_NAME: &'static str = "CoverageEligibilityResponse";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
resource_type(&mut o, d, "CoverageEligibilityResponse");
let r = CoverageEligibilityResponse {
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),
purpose: o.prim_list(d, "purpose", Kind::Code),
patient: o.one(d, "patient"),
serviced: o.choice(d, "serviced"),
created: o.prim(d, "created", Kind::DateTime),
requestor: o.one(d, "requestor"),
request: o.one(d, "request"),
outcome: o.prim(d, "outcome", Kind::Code),
disposition: o.prim(d, "disposition", Kind::String),
insurer: o.one(d, "insurer"),
insurance: o.list(d, "insurance"),
pre_auth_ref: o.prim(d, "preAuthRef", Kind::String),
form: o.one(d, "form"),
error: o.list(d, "error"),
};
required(d, "status", &r.status);
required_list(d, "purpose", &r.purpose, 1);
required(d, "patient", &r.patient);
required(d, "created", &r.created);
required(d, "request", &r.request);
required(d, "outcome", &r.outcome);
required(d, "insurer", &r.insurer);
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.raw(
"resourceType",
Json::String("CoverageEligibilityResponse".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.prim_list("purpose", &self.purpose);
w.one("patient", &self.patient);
w.choice("serviced", &self.serviced);
w.prim("created", &self.created);
w.one("requestor", &self.requestor);
w.one("request", &self.request);
w.prim("outcome", &self.outcome);
w.prim("disposition", &self.disposition);
w.one("insurer", &self.insurer);
w.list("insurance", &self.insurance);
w.prim("preAuthRef", &self.pre_auth_ref);
w.one("form", &self.form);
w.list("error", &self.error);
w.finish()
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct CoverageEligibilityResponseInsurance {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub coverage: Option<Reference>,
pub inforce: Option<Primitive<bool>>,
pub benefit_period: Option<Period>,
pub item: Vec<CoverageEligibilityResponseInsuranceItem>,
}
#[cfg(feature = "financial")]
impl FhirJson for CoverageEligibilityResponseInsurance {
const TYPE_NAME: &'static str = "CoverageEligibilityResponseInsurance";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = CoverageEligibilityResponseInsurance {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
coverage: o.one(d, "coverage"),
inforce: o.prim(d, "inforce", Kind::Boolean),
benefit_period: o.one(d, "benefitPeriod"),
item: o.list(d, "item"),
};
required(d, "coverage", &r.coverage);
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("coverage", &self.coverage);
w.prim("inforce", &self.inforce);
w.one("benefitPeriod", &self.benefit_period);
w.list("item", &self.item);
w.finish()
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct CoverageEligibilityResponseInsuranceItem {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub category: Option<CodeableConcept>,
pub product_or_service: Option<CodeableConcept>,
pub modifier: Vec<CodeableConcept>,
pub provider: Option<Reference>,
pub excluded: Option<Primitive<bool>>,
pub name: Option<Primitive<String>>,
pub description: Option<Primitive<String>>,
pub network: Option<CodeableConcept>,
pub unit: Option<CodeableConcept>,
pub term: Option<CodeableConcept>,
pub benefit: Vec<CoverageEligibilityResponseInsuranceItemBenefit>,
pub authorization_required: Option<Primitive<bool>>,
pub authorization_supporting: Vec<CodeableConcept>,
pub authorization_url: Option<Primitive<String>>,
}
#[cfg(feature = "financial")]
impl FhirJson for CoverageEligibilityResponseInsuranceItem {
const TYPE_NAME: &'static str = "CoverageEligibilityResponseInsuranceItem";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = CoverageEligibilityResponseInsuranceItem {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
category: o.one(d, "category"),
product_or_service: o.one(d, "productOrService"),
modifier: o.list(d, "modifier"),
provider: o.one(d, "provider"),
excluded: o.prim(d, "excluded", Kind::Boolean),
name: o.prim(d, "name", Kind::String),
description: o.prim(d, "description", Kind::String),
network: o.one(d, "network"),
unit: o.one(d, "unit"),
term: o.one(d, "term"),
benefit: o.list(d, "benefit"),
authorization_required: o.prim(d, "authorizationRequired", Kind::Boolean),
authorization_supporting: o.list(d, "authorizationSupporting"),
authorization_url: o.prim(d, "authorizationUrl", Kind::Uri),
};
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("category", &self.category);
w.one("productOrService", &self.product_or_service);
w.list("modifier", &self.modifier);
w.one("provider", &self.provider);
w.prim("excluded", &self.excluded);
w.prim("name", &self.name);
w.prim("description", &self.description);
w.one("network", &self.network);
w.one("unit", &self.unit);
w.one("term", &self.term);
w.list("benefit", &self.benefit);
w.prim("authorizationRequired", &self.authorization_required);
w.list("authorizationSupporting", &self.authorization_supporting);
w.prim("authorizationUrl", &self.authorization_url);
w.finish()
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct CoverageEligibilityResponseInsuranceItemBenefit {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub type_: Option<CodeableConcept>,
pub allowed: Option<CoverageEligibilityResponseInsuranceItemBenefitAllowed>,
pub used: Option<CoverageEligibilityResponseInsuranceItemBenefitUsed>,
}
#[cfg(feature = "financial")]
impl FhirJson for CoverageEligibilityResponseInsuranceItemBenefit {
const TYPE_NAME: &'static str = "CoverageEligibilityResponseInsuranceItemBenefit";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = CoverageEligibilityResponseInsuranceItemBenefit {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
type_: o.one(d, "type"),
allowed: o.choice(d, "allowed"),
used: o.choice(d, "used"),
};
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.choice("allowed", &self.allowed);
w.choice("used", &self.used);
w.finish()
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct CoverageEligibilityResponseError {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub code: Option<CodeableConcept>,
}
#[cfg(feature = "financial")]
impl FhirJson for CoverageEligibilityResponseError {
const TYPE_NAME: &'static str = "CoverageEligibilityResponseError";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = CoverageEligibilityResponseError {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
code: o.one(d, "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.list("modifierExtension", &self.modifier_extension);
w.one("code", &self.code);
w.finish()
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq)]
pub enum CoverageEligibilityResponseServiced {
Date(Primitive<String>),
Period(Period),
}
#[cfg(feature = "financial")]
impl Choice for CoverageEligibilityResponseServiced {
const TYPES: &'static [&'static str] = &["date", "Period"];
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),
"Period" => o.one(d, key).map(Self::Period),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::Date(v) => w.prim_value(&choice_key(base, "date"), v),
Self::Period(v) => w.value(&choice_key(base, "Period"), v),
}
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq)]
pub enum CoverageEligibilityResponseInsuranceItemBenefitAllowed {
UnsignedInt(Primitive<i32>),
String(Primitive<String>),
Money(Money),
}
#[cfg(feature = "financial")]
impl Choice for CoverageEligibilityResponseInsuranceItemBenefitAllowed {
const TYPES: &'static [&'static str] = &["unsignedInt", "string", "Money"];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"unsignedInt" => o.prim(d, key, Kind::UnsignedInt).map(Self::UnsignedInt),
"string" => o.prim(d, key, Kind::String).map(Self::String),
"Money" => o.one(d, key).map(Self::Money),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::UnsignedInt(v) => w.prim_value(&choice_key(base, "unsignedInt"), v),
Self::String(v) => w.prim_value(&choice_key(base, "string"), v),
Self::Money(v) => w.value(&choice_key(base, "Money"), v),
}
}
}
#[cfg(feature = "financial")]
#[derive(Debug, Clone, PartialEq)]
pub enum CoverageEligibilityResponseInsuranceItemBenefitUsed {
UnsignedInt(Primitive<i32>),
String(Primitive<String>),
Money(Money),
}
#[cfg(feature = "financial")]
impl Choice for CoverageEligibilityResponseInsuranceItemBenefitUsed {
const TYPES: &'static [&'static str] = &["unsignedInt", "string", "Money"];
fn decode_as(code: &str, key: &str, o: &mut Obj<'_>, d: &mut Decoder) -> Option<Self> {
match code {
"unsignedInt" => o.prim(d, key, Kind::UnsignedInt).map(Self::UnsignedInt),
"string" => o.prim(d, key, Kind::String).map(Self::String),
"Money" => o.one(d, key).map(Self::Money),
_ => None,
}
}
fn encode_into(&self, base: &str, w: &mut ObjWriter) {
match self {
Self::UnsignedInt(v) => w.prim_value(&choice_key(base, "unsignedInt"), v),
Self::String(v) => w.prim_value(&choice_key(base, "string"), v),
Self::Money(v) => w.value(&choice_key(base, "Money"), v),
}
}
}