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)]
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}