PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
result.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2021-2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
18#pragma once
19
20#include <kcenon/common/patterns/result.h>
21#include <kcenon/common/error/error_codes.h>
22
23namespace kcenon::pacs {
24
29template <typename T>
31
35using VoidResult = kcenon::common::VoidResult;
36
40using error_info = kcenon::common::error_info;
41
49namespace error_codes {
50 // Import common error codes
51 using namespace kcenon::common::error::codes::common_errors;
52
53 // ========================================================================
54 // PACS-specific error codes (-700 to -799)
55 // ========================================================================
56 constexpr int pacs_base = -700;
57
58 // DICOM file errors (-700 to -719)
59 constexpr int file_not_found = pacs_base - 0;
60 constexpr int file_read_error = pacs_base - 1;
61 constexpr int file_write_error = pacs_base - 2;
62 constexpr int invalid_dicom_file = pacs_base - 3;
63 constexpr int missing_dicm_prefix = pacs_base - 4;
64 constexpr int invalid_meta_info = pacs_base - 5;
67
68 // DICOM element errors (-720 to -739)
69 constexpr int element_not_found = pacs_base - 20;
70 constexpr int value_conversion_error = pacs_base - 21;
71 constexpr int invalid_vr = pacs_base - 22;
72 constexpr int invalid_tag = pacs_base - 23;
73 constexpr int data_size_mismatch = pacs_base - 24;
74
75 // Encoding/Decoding errors (-740 to -759)
76 constexpr int decode_error = pacs_base - 40;
77 constexpr int encode_error = pacs_base - 41;
78 constexpr int compression_error = pacs_base - 42;
79 constexpr int decompression_error = pacs_base - 43;
80 constexpr int invalid_tag_encoding = pacs_base - 44;
81 constexpr int invalid_length_encoding = pacs_base - 45;
82 constexpr int insufficient_data = pacs_base - 46;
83 constexpr int invalid_sequence = pacs_base - 47;
84 constexpr int unknown_vr = pacs_base - 48;
85 constexpr int codec_not_supported = pacs_base - 49;
86
87 // Network/Association errors (-760 to -779)
88 constexpr int association_rejected = pacs_base - 60;
89 constexpr int association_aborted = pacs_base - 61;
90 constexpr int dimse_error = pacs_base - 62;
91 constexpr int pdu_error = pacs_base - 63;
92
93 // Connection errors (-764 to -769)
94 constexpr int connection_failed = pacs_base - 64;
95 constexpr int connection_timeout = pacs_base - 65;
96 constexpr int send_failed = pacs_base - 66;
97 constexpr int receive_failed = pacs_base - 67;
98 constexpr int receive_timeout = pacs_base - 68;
99
100 // Association state errors (-770 to -774)
101 constexpr int invalid_association_state = pacs_base - 70;
102 constexpr int negotiation_failed = pacs_base - 71;
103 constexpr int no_acceptable_context = pacs_base - 72;
104 constexpr int release_failed = pacs_base - 73;
105 constexpr int already_released = pacs_base - 74;
106
107 // PDU errors (-775 to -779)
108 constexpr int pdu_encoding_error = pacs_base - 75;
109 constexpr int pdu_decoding_error = pacs_base - 76;
110 constexpr int incomplete_pdu = pacs_base - 77;
111 constexpr int invalid_pdu_type = pacs_base - 78;
112 constexpr int malformed_pdu = pacs_base - 79;
113
114 // Storage errors (-780 to -799)
115 constexpr int storage_failed = pacs_base - 80;
116 constexpr int retrieve_failed = pacs_base - 81;
117 constexpr int query_failed = pacs_base - 82;
118
119 // Database errors (-783 to -789)
120 constexpr int database_open_error = pacs_base - 83;
122 constexpr int database_query_error = pacs_base - 85;
126
127 // Cloud storage errors (-790 to -795)
128 constexpr int bucket_not_found = pacs_base - 90;
129 constexpr int object_not_found = pacs_base - 91;
130 constexpr int upload_error = pacs_base - 92;
131 constexpr int download_error = pacs_base - 93;
132 constexpr int cloud_connection_error = pacs_base - 94;
133
134 // HSM errors (-796 to -799)
135 constexpr int tier_not_available = pacs_base - 96;
136 constexpr int migration_failed = pacs_base - 97;
137 constexpr int instance_not_found = pacs_base - 98;
138
139 // ========================================================================
140 // Service-specific error codes (-800 to -899)
141 // ========================================================================
142 constexpr int service_base = -800;
143
144 // C-STORE service errors (-800 to -819)
152
153 // C-FIND service errors (-820 to -839)
154 constexpr int find_handler_not_set = service_base - 20;
158 constexpr int find_query_cancelled = service_base - 24;
159
160 // C-MOVE/C-GET service errors (-840 to -859)
166 constexpr int retrieve_cancelled = service_base - 45;
167
168 // Verification service errors (-860 to -869)
170
171 // MPPS service errors (-870 to -879)
172 constexpr int mpps_handler_not_set = service_base - 70;
173 constexpr int mpps_invalid_state = service_base - 71;
176 constexpr int mpps_missing_uid = service_base - 74;
178
179 // Storage Commitment service errors (-876 to -879)
184
185 // Worklist service errors (-880 to -889)
188
189 // N-GET service errors (-882 to -886)
194 constexpr int n_get_missing_uid = service_base - 86;
195
196 // Print Management service errors (-887 to -889)
200
201 // General service errors (-890 to -899)
204 constexpr int not_a_regular_file = service_base - 92;
206 constexpr int file_parse_failed = service_base - 94;
207
208 // UPS service errors (-895 to -905)
209 constexpr int ups_handler_not_set = service_base - 95;
212 constexpr int ups_missing_uid = service_base - 98;
217} // namespace error_codes
218
219// Re-export common utility functions
220using kcenon::common::ok;
221using kcenon::common::make_error;
222using kcenon::common::try_catch;
223using kcenon::common::try_catch_void;
224
233template <typename T>
234inline Result<T> pacs_error(int code, const std::string& message,
235 const std::string& details = "") {
236 if (details.empty()) {
237 return kcenon::common::make_error<T>(code, message, "pacs");
238 }
239 return kcenon::common::make_error<T>(code, message, "pacs", details);
240}
241
249inline VoidResult pacs_void_error(int code, const std::string& message,
250 const std::string& details = "") {
251 if (details.empty()) {
252 return VoidResult(error_info{code, message, "pacs"});
253 }
254 return VoidResult(error_info{code, message, "pacs", details});
255}
256
257} // namespace kcenon::pacs
258
259
260// Convenience macros for PACS Result pattern usage
261
265#define PACS_RETURN_IF_ERROR(expr) COMMON_RETURN_IF_ERROR(expr)
266
270#define PACS_ASSIGN_OR_RETURN(decl, expr) COMMON_ASSIGN_OR_RETURN(decl, expr)
271
275#define PACS_RETURN_ERROR_IF(condition, code, message) \
276 COMMON_RETURN_ERROR_IF(condition, code, message, "pacs")
constexpr int ups_unexpected_command
Definition result.h:210
constexpr int missing_dicm_prefix
Definition result.h:63
constexpr int database_transaction_error
Definition result.h:123
constexpr int negotiation_failed
Definition result.h:102
constexpr int ups_invalid_state_transition
Definition result.h:211
constexpr int mpps_invalid_status_transition
Definition result.h:177
constexpr int ups_context_not_accepted
Definition result.h:216
constexpr int retrieve_cancelled
Definition result.h:166
constexpr int file_parse_failed
Definition result.h:206
constexpr int storage_commitment_unexpected_command
Definition result.h:180
constexpr int n_get_handler_not_set
Definition result.h:190
constexpr int database_integrity_error
Definition result.h:125
constexpr int mpps_invalid_state
Definition result.h:173
constexpr int mpps_handler_not_set
Definition result.h:172
constexpr int retrieve_unknown_destination
Definition result.h:163
constexpr int invalid_vr
Definition result.h:71
constexpr int data_size_mismatch
Definition result.h:73
constexpr int pacs_base
Definition result.h:56
constexpr int insufficient_data
Definition result.h:82
constexpr int print_invalid_sop_class
Definition result.h:199
constexpr int storage_failed
Definition result.h:115
constexpr int print_handler_not_set
Definition result.h:197
constexpr int find_invalid_query_level
Definition result.h:155
constexpr int tier_not_available
Definition result.h:135
constexpr int element_not_found
Definition result.h:69
constexpr int query_failed
Definition result.h:117
constexpr int ups_missing_transaction_uid
Definition result.h:215
constexpr int receive_failed
Definition result.h:97
constexpr int instance_not_found
Definition result.h:137
constexpr int echo_unexpected_command
Definition result.h:169
constexpr int find_handler_not_set
Definition result.h:154
constexpr int not_a_regular_file
Definition result.h:204
constexpr int file_parsing_not_implemented
Definition result.h:205
constexpr int migration_failed
Definition result.h:136
constexpr int retrieve_handler_not_set
Definition result.h:161
constexpr int store_unexpected_command
Definition result.h:151
constexpr int pdu_decoding_error
Definition result.h:109
constexpr int print_unexpected_command
Definition result.h:198
constexpr int invalid_length_encoding
Definition result.h:81
constexpr int retrieve_missing_destination
Definition result.h:162
constexpr int upload_error
Definition result.h:130
constexpr int malformed_pdu
Definition result.h:112
constexpr int database_query_error
Definition result.h:122
constexpr int storage_commitment_missing_transaction_uid
Definition result.h:182
constexpr int send_failed
Definition result.h:96
constexpr int retrieve_unexpected_command
Definition result.h:165
constexpr int value_conversion_error
Definition result.h:70
constexpr int mpps_context_not_accepted
Definition result.h:175
constexpr int pdu_error
Definition result.h:91
constexpr int n_get_missing_uid
Definition result.h:194
constexpr int mpps_missing_uid
Definition result.h:176
constexpr int compression_error
Definition result.h:78
constexpr int ups_missing_uid
Definition result.h:212
constexpr int store_missing_sop_instance_uid
Definition result.h:147
constexpr int connection_timeout
Definition result.h:95
constexpr int ups_invalid_action_type
Definition result.h:214
constexpr int encode_error
Definition result.h:77
constexpr int find_query_cancelled
Definition result.h:158
constexpr int database_connection_error
Definition result.h:121
constexpr int ups_handler_not_set
Definition result.h:209
constexpr int download_error
Definition result.h:131
constexpr int invalid_meta_info
Definition result.h:64
constexpr int connection_failed
Definition result.h:94
constexpr int invalid_pdu_type
Definition result.h:111
constexpr int service_base
Definition result.h:142
constexpr int store_dataset_required
Definition result.h:150
constexpr int worklist_handler_not_set
Definition result.h:186
constexpr int mpps_unexpected_command
Definition result.h:174
constexpr int file_read_error
Definition result.h:60
constexpr int n_get_unexpected_command
Definition result.h:191
constexpr int retrieve_failed
Definition result.h:116
constexpr int worklist_unexpected_command
Definition result.h:187
constexpr int storage_commitment_invalid_sop_class
Definition result.h:181
constexpr int file_write_error
Definition result.h:61
constexpr int invalid_tag
Definition result.h:72
constexpr int pdu_encoding_error
Definition result.h:108
constexpr int object_not_found
Definition result.h:129
constexpr int find_unexpected_command
Definition result.h:157
constexpr int invalid_tag_encoding
Definition result.h:80
constexpr int invalid_dicom_file
Definition result.h:62
constexpr int dimse_error
Definition result.h:90
constexpr int codec_not_supported
Definition result.h:85
constexpr int n_get_context_not_accepted
Definition result.h:193
constexpr int retrieve_sub_operation_failed
Definition result.h:164
constexpr int missing_transfer_syntax
Definition result.h:65
constexpr int storage_commitment_missing_sequence
Definition result.h:183
constexpr int find_missing_query_level
Definition result.h:156
constexpr int database_open_error
Definition result.h:120
constexpr int n_get_instance_not_found
Definition result.h:192
constexpr int decompression_error
Definition result.h:79
constexpr int ups_workitem_not_found
Definition result.h:213
constexpr int file_not_found_service
Definition result.h:203
constexpr int invalid_sequence
Definition result.h:83
constexpr int cloud_connection_error
Definition result.h:132
constexpr int association_not_established
Definition result.h:202
constexpr int decode_error
Definition result.h:76
constexpr int bucket_not_found
Definition result.h:128
constexpr int store_pre_validation_failed
Definition result.h:149
constexpr int store_no_accepted_context
Definition result.h:148
constexpr int store_handler_not_set
Definition result.h:145
constexpr int store_missing_sop_class_uid
Definition result.h:146
constexpr int unsupported_transfer_syntax
Definition result.h:66
constexpr int database_migration_error
Definition result.h:124
constexpr int incomplete_pdu
Definition result.h:110
constexpr int unknown_vr
Definition result.h:84
constexpr int file_not_found
Definition result.h:59
VoidResult pacs_void_error(int code, const std::string &message, const std::string &details="")
Create a PACS void error result.
Definition result.h:249
Result< T > pacs_error(int code, const std::string &message, const std::string &details="")
Create a PACS error result with module context.
Definition result.h:234
kcenon::common::error_info error_info
Error information type.
Definition result.h:40
std::string_view code