Skip to main content

haste_fhir_client/
request.rs

1use haste_fhir_model::r4::generated::resources::{
2    Bundle, CapabilityStatement, Parameters, Resource, ResourceType,
3};
4use haste_jwt::VersionId;
5use json_patch::Patch;
6use thiserror::Error;
7
8use crate::url::ParsedParameters;
9
10#[derive(Debug, Clone)]
11pub struct FHIRCreateRequest {
12    pub resource_type: ResourceType,
13    pub resource: Resource,
14}
15
16#[derive(Debug, Clone)]
17pub struct FHIRReadRequest {
18    pub resource_type: ResourceType,
19    pub id: String,
20}
21
22#[derive(Debug, Clone)]
23pub struct FHIRVersionReadRequest {
24    pub resource_type: ResourceType,
25    pub id: String,
26    pub version_id: VersionId,
27}
28
29#[derive(Debug, Clone)]
30pub struct FHIRUpdateInstanceRequest {
31    pub resource_type: ResourceType,
32    pub id: String,
33    pub resource: Resource,
34}
35
36#[derive(Debug, Clone)]
37pub struct FHIRConditionalUpdateRequest {
38    pub resource_type: ResourceType,
39    pub parameters: ParsedParameters,
40    pub resource: Resource,
41}
42
43#[derive(Debug, Clone)]
44pub struct FHIRPatchRequest {
45    pub resource_type: ResourceType,
46    pub id: String,
47    pub patch: Patch,
48}
49
50#[derive(Debug, Clone)]
51pub struct FHIRHistoryInstanceRequest {
52    pub resource_type: ResourceType,
53    pub id: String,
54    pub parameters: ParsedParameters,
55}
56
57#[derive(Debug, Clone)]
58pub struct FHIRHistoryTypeRequest {
59    pub resource_type: ResourceType,
60    pub parameters: ParsedParameters,
61}
62
63#[derive(Debug, Clone)]
64pub struct FHIRHistorySystemRequest {
65    pub parameters: ParsedParameters,
66}
67
68#[derive(Debug, Clone)]
69pub struct FHIRDeleteInstanceRequest {
70    pub resource_type: ResourceType,
71    pub id: String,
72}
73
74#[derive(Debug, Clone)]
75pub struct FHIRDeleteTypeRequest {
76    pub resource_type: ResourceType,
77    pub parameters: ParsedParameters,
78}
79
80#[derive(Debug, Clone)]
81pub struct FHIRDeleteSystemRequest {
82    pub parameters: ParsedParameters,
83}
84
85#[derive(Debug, Clone)]
86pub struct FHIRSearchTypeRequest {
87    pub resource_type: ResourceType,
88    pub parameters: ParsedParameters,
89}
90
91#[derive(Debug, Clone)]
92pub struct FHIRSearchSystemRequest {
93    pub parameters: ParsedParameters,
94}
95
96#[derive(Error, Debug)]
97pub enum OperationParseError {
98    #[error("Invalid operation name")]
99    Invalid,
100}
101
102#[derive(Debug, Clone)]
103pub struct Operation(String);
104impl Operation {
105    pub fn new(name: &str) -> Result<Self, OperationParseError> {
106        let operation_name = name.trim_start_matches('$');
107        Ok(Operation(operation_name.to_string()))
108    }
109    pub fn name(&self) -> &str {
110        &self.0
111    }
112}
113
114#[derive(Debug, Clone)]
115pub struct FHIRInvokeInstanceRequest {
116    pub operation: Operation,
117    pub resource_type: ResourceType,
118    pub id: String,
119    pub parameters: Parameters,
120}
121
122#[derive(Debug, Clone)]
123pub struct FHIRInvokeTypeRequest {
124    pub operation: Operation,
125    pub resource_type: ResourceType,
126    pub parameters: Parameters,
127}
128
129#[derive(Debug, Clone)]
130pub struct FHIRInvokeSystemRequest {
131    pub operation: Operation,
132    pub parameters: Parameters,
133}
134
135#[derive(Debug, Clone)]
136pub struct FHIRBatchRequest {
137    pub resource: Bundle,
138}
139
140#[derive(Debug, Clone)]
141pub struct FHIRTransactionRequest {
142    pub resource: Bundle,
143}
144
145#[derive(Debug, Clone)]
146pub enum InvocationRequest {
147    Instance(FHIRInvokeInstanceRequest),
148    Type(FHIRInvokeTypeRequest),
149    System(FHIRInvokeSystemRequest),
150}
151
152#[derive(Debug, Clone)]
153pub enum HistoryRequest {
154    Instance(FHIRHistoryInstanceRequest),
155    Type(FHIRHistoryTypeRequest),
156    System(FHIRHistorySystemRequest),
157}
158
159#[derive(Debug, Clone)]
160pub enum SearchRequest {
161    Type(FHIRSearchTypeRequest),
162    System(FHIRSearchSystemRequest),
163}
164
165#[derive(Debug, Clone)]
166pub enum DeleteRequest {
167    Instance(FHIRDeleteInstanceRequest),
168    Type(FHIRDeleteTypeRequest),
169    System(FHIRDeleteSystemRequest),
170}
171
172#[derive(Debug, Clone)]
173pub enum UpdateRequest {
174    Instance(FHIRUpdateInstanceRequest),
175    Conditional(FHIRConditionalUpdateRequest),
176}
177
178#[derive(Debug, Clone)]
179pub struct CompartmentRequest {
180    pub resource_type: ResourceType,
181    pub id: String,
182    pub request: Box<FHIRRequest>,
183}
184
185#[derive(Debug, Clone)]
186pub enum FHIRRequest {
187    Create(FHIRCreateRequest),
188
189    Read(FHIRReadRequest),
190    VersionRead(FHIRVersionReadRequest),
191
192    Update(UpdateRequest),
193
194    Patch(FHIRPatchRequest),
195
196    Delete(DeleteRequest),
197
198    Capabilities,
199
200    Search(SearchRequest),
201
202    History(HistoryRequest),
203
204    Invocation(InvocationRequest),
205
206    Batch(FHIRBatchRequest),
207    Transaction(FHIRTransactionRequest),
208
209    Compartment(CompartmentRequest),
210}
211#[derive(Debug, Clone)]
212pub struct FHIRCreateResponse {
213    pub resource: Resource,
214}
215#[derive(Debug, Clone)]
216pub struct FHIRReadResponse {
217    pub resource: Option<Resource>,
218}
219#[derive(Debug, Clone)]
220pub struct FHIRVersionReadResponse {
221    pub resource: Resource,
222}
223#[derive(Debug, Clone)]
224pub struct FHIRUpdateResponse {
225    pub resource: Resource,
226}
227#[derive(Debug, Clone)]
228pub struct FHIRPatchResponse {
229    pub resource: Resource,
230}
231#[derive(Debug, Clone)]
232pub struct FHIRDeleteInstanceResponse {
233    pub resource: Resource,
234}
235#[derive(Debug, Clone)]
236pub struct FHIRDeleteTypeResponse {}
237#[derive(Debug, Clone)]
238pub struct FHIRDeleteSystemResponse {}
239#[derive(Debug, Clone)]
240pub struct FHIRCapabilitiesResponse {
241    pub capabilities: CapabilityStatement,
242}
243
244#[derive(Debug, Clone)]
245pub struct FHIRSearchTypeResponse {
246    pub bundle: Bundle,
247}
248#[derive(Debug, Clone)]
249pub struct FHIRSearchSystemResponse {
250    pub bundle: Bundle,
251}
252#[derive(Debug, Clone)]
253pub struct FHIRHistoryInstanceResponse {
254    pub bundle: Bundle,
255}
256#[derive(Debug, Clone)]
257pub struct FHIRHistoryTypeResponse {
258    pub bundle: Bundle,
259}
260#[derive(Debug, Clone)]
261pub struct FHIRHistorySystemResponse {
262    pub bundle: Bundle,
263}
264#[derive(Debug, Clone)]
265pub struct FHIRInvokeInstanceResponse {
266    pub resource: Resource,
267}
268#[derive(Debug, Clone)]
269pub struct FHIRInvokeTypeResponse {
270    pub resource: Resource,
271}
272#[derive(Debug, Clone)]
273pub struct FHIRInvokeSystemResponse {
274    pub resource: Resource,
275}
276#[derive(Debug, Clone)]
277pub struct FHIRBatchResponse {
278    pub resource: Bundle,
279}
280#[derive(Debug, Clone)]
281pub struct FHIRTransactionResponse {
282    pub resource: Bundle,
283}
284
285#[derive(Debug, Clone)]
286pub enum HistoryResponse {
287    Instance(FHIRHistoryInstanceResponse),
288    Type(FHIRHistoryTypeResponse),
289    System(FHIRHistorySystemResponse),
290}
291
292#[derive(Debug, Clone)]
293pub enum SearchResponse {
294    Type(FHIRSearchTypeResponse),
295    System(FHIRSearchSystemResponse),
296}
297
298#[derive(Debug, Clone)]
299pub enum DeleteResponse {
300    Instance(FHIRDeleteInstanceResponse),
301    Type(FHIRDeleteTypeResponse),
302    System(FHIRDeleteSystemResponse),
303}
304
305#[derive(Debug, Clone)]
306pub enum InvokeResponse {
307    Instance(FHIRInvokeInstanceResponse),
308    Type(FHIRInvokeTypeResponse),
309    System(FHIRInvokeSystemResponse),
310}
311
312#[derive(Debug, Clone)]
313pub enum FHIRResponse {
314    Create(FHIRCreateResponse),
315
316    Read(FHIRReadResponse),
317    VersionRead(FHIRVersionReadResponse),
318
319    Update(FHIRUpdateResponse),
320
321    Patch(FHIRPatchResponse),
322
323    Delete(DeleteResponse),
324
325    Capabilities(FHIRCapabilitiesResponse),
326
327    Search(SearchResponse),
328
329    History(HistoryResponse),
330
331    Invoke(InvokeResponse),
332
333    Batch(FHIRBatchResponse),
334    Transaction(FHIRTransactionResponse),
335}