Skip to main content

rh_codegen/
fhir_types.rs

1//! FHIR-specific data structures
2//!
3//! This module contains data structures that represent FHIR StructureDefinitions,
4//! ElementDefinitions, and related FHIR concepts.
5
6#![allow(dead_code)]
7
8use serde::Deserialize;
9
10/// Represents a FHIR ValueSet resource
11#[derive(Debug, Deserialize, Clone)]
12#[allow(dead_code)]
13pub struct ValueSet {
14    #[serde(rename = "resourceType")]
15    pub resource_type: String,
16    pub id: Option<String>,
17    pub url: Option<String>,
18    pub version: Option<String>,
19    pub name: Option<String>,
20    pub title: Option<String>,
21    pub status: Option<String>,
22    pub description: Option<String>,
23    pub expansion: Option<ValueSetExpansion>,
24    pub compose: Option<ValueSetCompose>,
25}
26
27/// Represents a ValueSet expansion
28#[derive(Debug, Deserialize, Clone)]
29pub struct ValueSetExpansion {
30    pub timestamp: Option<String>,
31    pub total: Option<u32>,
32    pub contains: Option<Vec<ValueSetExpansionContains>>,
33}
34
35/// Represents a concept in a ValueSet expansion
36#[derive(Debug, Deserialize, Clone)]
37pub struct ValueSetExpansionContains {
38    pub system: Option<String>,
39    pub code: String,
40    pub display: Option<String>,
41}
42
43/// Represents a ValueSet compose
44#[derive(Debug, Deserialize, Clone)]
45pub struct ValueSetCompose {
46    pub include: Option<Vec<ValueSetComposeInclude>>,
47    pub exclude: Option<Vec<ValueSetComposeInclude>>,
48}
49
50/// Represents an include/exclude in ValueSet compose
51#[derive(Debug, Deserialize, Clone)]
52pub struct ValueSetComposeInclude {
53    pub system: Option<String>,
54    pub version: Option<String>,
55    pub concept: Option<Vec<ValueSetComposeConcept>>,
56    pub filter: Option<Vec<ValueSetComposeFilter>>,
57}
58
59/// Represents a concept in ValueSet compose
60#[derive(Debug, Deserialize, Clone)]
61pub struct ValueSetComposeConcept {
62    pub code: String,
63    pub display: Option<String>,
64}
65
66/// Represents a filter in ValueSet compose
67#[derive(Debug, Deserialize, Clone)]
68pub struct ValueSetComposeFilter {
69    pub property: String,
70    pub op: String,
71    pub value: String,
72}
73
74/// Represents a FHIR CodeSystem resource
75#[derive(Debug, Deserialize, Clone)]
76pub struct CodeSystem {
77    #[serde(rename = "resourceType")]
78    pub resource_type: String,
79    pub id: Option<String>,
80    pub url: Option<String>,
81    pub version: Option<String>,
82    pub name: Option<String>,
83    pub title: Option<String>,
84    pub status: Option<String>,
85    pub description: Option<String>,
86    pub content: Option<String>,
87    pub concept: Option<Vec<CodeSystemConcept>>,
88}
89
90/// Represents a concept in a CodeSystem
91#[derive(Debug, Deserialize, Clone)]
92pub struct CodeSystemConcept {
93    pub code: String,
94    pub display: Option<String>,
95    pub definition: Option<String>,
96}
97
98/// Represents a FHIR element definition
99#[derive(Debug, Deserialize, Clone)]
100pub struct ElementDefinition {
101    pub id: Option<String>,
102    pub path: String,
103    pub short: Option<String>,
104    pub definition: Option<String>,
105    pub min: Option<u32>,
106    pub max: Option<String>,
107    #[serde(rename = "type")]
108    pub element_type: Option<Vec<ElementType>>,
109    pub fixed: Option<serde_json::Value>,
110    pub pattern: Option<serde_json::Value>,
111    pub binding: Option<ElementBinding>,
112    pub constraint: Option<Vec<ElementConstraint>>,
113}
114
115/// Represents a FHIR constraint (invariant) on an element
116#[derive(Debug, Deserialize, Clone)]
117pub struct ElementConstraint {
118    pub key: String,
119    pub severity: String,
120    pub human: String,
121    pub expression: Option<String>,
122    pub xpath: Option<String>,
123    pub source: Option<String>,
124}
125
126/// Represents a FHIR element binding to a value set
127#[derive(Debug, Deserialize, Clone)]
128pub struct ElementBinding {
129    pub strength: String,
130    pub description: Option<String>,
131    #[serde(rename = "valueSet")]
132    pub value_set: Option<String>,
133}
134
135/// Represents a FHIR element type
136#[derive(Debug, Deserialize, Clone)]
137pub struct ElementType {
138    pub code: Option<String>,
139    #[serde(rename = "targetProfile")]
140    pub target_profile: Option<Vec<String>>,
141}
142
143/// Represents a FHIR StructureDefinition
144#[derive(Debug, Clone, Deserialize)]
145pub struct StructureDefinition {
146    #[serde(rename = "resourceType")]
147    pub resource_type: String,
148    pub id: String,
149    pub url: String,
150    pub version: Option<String>,
151    pub name: String,
152    pub title: Option<String>,
153    pub status: String,
154    pub description: Option<String>,
155    pub purpose: Option<String>,
156    pub kind: String,
157    #[serde(rename = "abstract")]
158    pub is_abstract: bool,
159    #[serde(rename = "type")]
160    pub base_type: String,
161    #[serde(rename = "baseDefinition")]
162    pub base_definition: Option<String>,
163    pub differential: Option<StructureDefinitionDifferential>,
164    pub snapshot: Option<StructureDefinitionSnapshot>,
165}
166
167#[derive(Debug, Clone, Deserialize)]
168pub struct StructureDefinitionDifferential {
169    pub element: Vec<ElementDefinition>,
170}
171
172#[derive(Debug, Clone, Deserialize)]
173pub struct StructureDefinitionSnapshot {
174    pub element: Vec<ElementDefinition>,
175}