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