#![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 = "base")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct Location {
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 operational_status: Option<Coding>,
pub name: Option<Primitive<String>>,
pub alias: Vec<Primitive<String>>,
pub description: Option<Primitive<String>>,
pub mode: Option<Primitive<String>>,
pub type_: Vec<CodeableConcept>,
pub telecom: Vec<ContactPoint>,
pub address: Option<Address>,
pub physical_type: Option<CodeableConcept>,
pub position: Option<LocationPosition>,
pub managing_organization: Option<Reference>,
pub part_of: Option<Reference>,
pub hours_of_operation: Vec<LocationHoursOfOperation>,
pub availability_exceptions: Option<Primitive<String>>,
pub endpoint: Vec<Reference>,
}
#[cfg(feature = "base")]
impl FhirJson for Location {
const TYPE_NAME: &'static str = "Location";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
resource_type(&mut o, d, "Location");
let r = Location {
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),
operational_status: o.one(d, "operationalStatus"),
name: o.prim(d, "name", Kind::String),
alias: o.prim_list(d, "alias", Kind::String),
description: o.prim(d, "description", Kind::String),
mode: o.prim(d, "mode", Kind::Code),
type_: o.list(d, "type"),
telecom: o.list(d, "telecom"),
address: o.one(d, "address"),
physical_type: o.one(d, "physicalType"),
position: o.one(d, "position"),
managing_organization: o.one(d, "managingOrganization"),
part_of: o.one(d, "partOf"),
hours_of_operation: o.list(d, "hoursOfOperation"),
availability_exceptions: o.prim(d, "availabilityExceptions", Kind::String),
endpoint: o.list(d, "endpoint"),
};
o.finish(d);
Some(r)
}
fn encode(&self) -> Json {
let mut w = ObjWriter::new();
w.raw("resourceType", Json::String("Location".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("operationalStatus", &self.operational_status);
w.prim("name", &self.name);
w.prim_list("alias", &self.alias);
w.prim("description", &self.description);
w.prim("mode", &self.mode);
w.list("type", &self.type_);
w.list("telecom", &self.telecom);
w.one("address", &self.address);
w.one("physicalType", &self.physical_type);
w.one("position", &self.position);
w.one("managingOrganization", &self.managing_organization);
w.one("partOf", &self.part_of);
w.list("hoursOfOperation", &self.hours_of_operation);
w.prim("availabilityExceptions", &self.availability_exceptions);
w.list("endpoint", &self.endpoint);
w.finish()
}
}
#[cfg(feature = "base")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct LocationPosition {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub longitude: Option<Primitive<Decimal>>,
pub latitude: Option<Primitive<Decimal>>,
pub altitude: Option<Primitive<Decimal>>,
}
#[cfg(feature = "base")]
impl FhirJson for LocationPosition {
const TYPE_NAME: &'static str = "LocationPosition";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = LocationPosition {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
longitude: o.prim(d, "longitude", Kind::Decimal),
latitude: o.prim(d, "latitude", Kind::Decimal),
altitude: o.prim(d, "altitude", Kind::Decimal),
};
required(d, "longitude", &r.longitude);
required(d, "latitude", &r.latitude);
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("longitude", &self.longitude);
w.prim("latitude", &self.latitude);
w.prim("altitude", &self.altitude);
w.finish()
}
}
#[cfg(feature = "base")]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct LocationHoursOfOperation {
pub id: Option<String>,
pub extension: Vec<Extension>,
pub modifier_extension: Vec<Extension>,
pub days_of_week: Vec<Primitive<String>>,
pub all_day: Option<Primitive<bool>>,
pub opening_time: Option<Primitive<String>>,
pub closing_time: Option<Primitive<String>>,
}
#[cfg(feature = "base")]
impl FhirJson for LocationHoursOfOperation {
const TYPE_NAME: &'static str = "LocationHoursOfOperation";
fn decode(v: &Json, d: &mut Decoder) -> Option<Self> {
let mut o = Obj::new(v, d)?;
let r = LocationHoursOfOperation {
id: o.string(d, "id"),
extension: o.list(d, "extension"),
modifier_extension: o.list(d, "modifierExtension"),
days_of_week: o.prim_list(d, "daysOfWeek", Kind::Code),
all_day: o.prim(d, "allDay", Kind::Boolean),
opening_time: o.prim(d, "openingTime", Kind::Time),
closing_time: o.prim(d, "closingTime", Kind::Time),
};
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("daysOfWeek", &self.days_of_week);
w.prim("allDay", &self.all_day);
w.prim("openingTime", &self.opening_time);
w.prim("closingTime", &self.closing_time);
w.finish()
}
}