#![allow(unused_imports)]
use crate::r4::types;
use ::serde::{Deserialize, Serialize};
use fhir_derive_macros::{Builder, Validate};
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate, Builder)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct SubstanceSourceMaterial {
pub id: Option<types::String>,
pub meta: Option<types::Meta>,
pub implicit_rules: Option<types::Uri>,
#[serde(rename = "_implicitRules")]
pub implicit_rules_ext: Option<types::Element>,
pub language: Option<types::Code>,
#[serde(rename = "_language")]
pub language_ext: Option<types::Element>,
pub text: Option<types::Narrative>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub contained: Vec<::serde_json::Value>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
pub source_material_class: Option<types::CodeableConcept>,
pub source_material_type: Option<types::CodeableConcept>,
pub source_material_state: Option<types::CodeableConcept>,
pub organism_id: Option<types::Identifier>,
pub organism_name: Option<types::String>,
#[serde(rename = "_organismName")]
pub organism_name_ext: Option<types::Element>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub parent_substance_id: Vec<types::Identifier>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub parent_substance_name: Vec<types::String>,
#[serde(rename = "_parentSubstanceName")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub parent_substance_name_ext: Vec<Option<types::Element>>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub country_of_origin: Vec<types::CodeableConcept>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub geographical_location: Vec<types::String>,
#[serde(rename = "_geographicalLocation")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub geographical_location_ext: Vec<Option<types::Element>>,
pub development_stage: Option<types::CodeableConcept>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub fraction_description: Vec<SubstanceSourceMaterialFractionDescription>,
pub organism: Option<SubstanceSourceMaterialOrganism>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub part_description: Vec<SubstanceSourceMaterialPartDescription>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct SubstanceSourceMaterialFractionDescription {
pub id: Option<types::String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
pub fraction: Option<types::String>,
#[serde(rename = "_fraction")]
pub fraction_ext: Option<types::Element>,
pub material_type: Option<types::CodeableConcept>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct SubstanceSourceMaterialOrganism {
pub id: Option<types::String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
pub family: Option<types::CodeableConcept>,
pub genus: Option<types::CodeableConcept>,
pub species: Option<types::CodeableConcept>,
pub intraspecific_type: Option<types::CodeableConcept>,
pub intraspecific_description: Option<types::String>,
#[serde(rename = "_intraspecificDescription")]
pub intraspecific_description_ext: Option<types::Element>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub author: Vec<SubstanceSourceMaterialOrganismAuthor>,
pub hybrid: Option<SubstanceSourceMaterialOrganismHybrid>,
pub organism_general: Option<SubstanceSourceMaterialOrganismOrganismGeneral>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct SubstanceSourceMaterialOrganismAuthor {
pub id: Option<types::String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
pub author_type: Option<types::CodeableConcept>,
pub author_description: Option<types::String>,
#[serde(rename = "_authorDescription")]
pub author_description_ext: Option<types::Element>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct SubstanceSourceMaterialOrganismHybrid {
pub id: Option<types::String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
pub maternal_organism_id: Option<types::String>,
#[serde(rename = "_maternalOrganismId")]
pub maternal_organism_id_ext: Option<types::Element>,
pub maternal_organism_name: Option<types::String>,
#[serde(rename = "_maternalOrganismName")]
pub maternal_organism_name_ext: Option<types::Element>,
pub paternal_organism_id: Option<types::String>,
#[serde(rename = "_paternalOrganismId")]
pub paternal_organism_id_ext: Option<types::Element>,
pub paternal_organism_name: Option<types::String>,
#[serde(rename = "_paternalOrganismName")]
pub paternal_organism_name_ext: Option<types::Element>,
pub hybrid_type: Option<types::CodeableConcept>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct SubstanceSourceMaterialOrganismOrganismGeneral {
pub id: Option<types::String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
pub kingdom: Option<types::CodeableConcept>,
pub phylum: Option<types::CodeableConcept>,
pub class: Option<types::CodeableConcept>,
pub order: Option<types::CodeableConcept>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct SubstanceSourceMaterialPartDescription {
pub id: Option<types::String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
pub part: Option<types::CodeableConcept>,
pub part_location: Option<types::CodeableConcept>,
}
#[cfg(test)]
mod tests {
use super::*;
type T = SubstanceSourceMaterial;
#[test]
fn test_default() {
let _ = T::default();
}
#[test]
fn test_serde_round_trip() {
let value = T::default();
let json = ::serde_json::to_value(&value).expect("to_value");
let back: T = ::serde_json::from_value(json).expect("from_value");
assert_eq!(value, back);
}
}