1use crate::HRESULT;
7use mssf_com::FabricTypes::FABRIC_ERROR_CODE;
8
9const S_OK: FABRIC_ERROR_CODE = FABRIC_ERROR_CODE(windows_core::Win32::Foundation::S_OK.0);
11const E_ABORT: FABRIC_ERROR_CODE = FABRIC_ERROR_CODE(windows_core::Win32::Foundation::E_ABORT.0);
12const E_ACCESSDENIED: FABRIC_ERROR_CODE =
13 FABRIC_ERROR_CODE(windows_core::Win32::Foundation::E_ACCESSDENIED.0);
14const E_FAIL: FABRIC_ERROR_CODE = FABRIC_ERROR_CODE(windows_core::Win32::Foundation::E_FAIL.0);
15const E_HANDLE: FABRIC_ERROR_CODE = FABRIC_ERROR_CODE(windows_core::Win32::Foundation::E_HANDLE.0);
16const E_INVALIDARG: FABRIC_ERROR_CODE =
17 FABRIC_ERROR_CODE(windows_core::Win32::Foundation::E_INVALIDARG.0);
18const E_NOINTERFACE: FABRIC_ERROR_CODE =
19 FABRIC_ERROR_CODE(windows_core::Win32::Foundation::E_NOINTERFACE.0);
20const E_NOTIMPL: FABRIC_ERROR_CODE =
21 FABRIC_ERROR_CODE(windows_core::Win32::Foundation::E_NOTIMPL.0);
22const E_OUTOFMEMORY: FABRIC_ERROR_CODE =
23 FABRIC_ERROR_CODE(windows_core::Win32::Foundation::E_OUTOFMEMORY.0);
24const E_POINTER: FABRIC_ERROR_CODE =
25 FABRIC_ERROR_CODE(windows_core::Win32::Foundation::E_POINTER.0);
26const E_UNEXPECTED: FABRIC_ERROR_CODE =
27 FABRIC_ERROR_CODE(windows_core::Win32::Foundation::E_UNEXPECTED.0);
28
29const E_FILE_EXISTS: FABRIC_ERROR_CODE = FABRIC_ERROR_CODE(
31 windows_core::Win32::Foundation::ERROR_FILE_EXISTS
32 .to_hresult()
33 .0,
34);
35const E_DIR_NOT_EMPTY: FABRIC_ERROR_CODE = FABRIC_ERROR_CODE(
36 windows_core::Win32::Foundation::ERROR_DIR_NOT_EMPTY
37 .to_hresult()
38 .0,
39);
40const E_NOT_FOUND: FABRIC_ERROR_CODE = FABRIC_ERROR_CODE(
41 windows_core::Win32::Foundation::ERROR_NOT_FOUND
42 .to_hresult()
43 .0,
44);
45
46const FABRIC_INTERNAL_E_CANNOT_CONNECT: FABRIC_ERROR_CODE = FABRIC_ERROR_CODE(0x80071CC0u32 as i32);
49
50macro_rules! define_fabric_error_code{
59 ($( $code1:ident ),* ,($lit:literal), $( $code:ident ),*) =>{
60 #[allow(non_camel_case_types)]
61 #[derive(Debug, Clone, PartialEq)]
62 #[repr(i32)]
63 pub enum ErrorCode {
64 $(
66 $code1 = $code1 .0,
67 )*
68
69 $(
71 $code = mssf_com::FabricTypes::FABRIC_ERROR_CODE::$code .0,
72 )*
73 }
74
75 impl TryFrom<FABRIC_ERROR_CODE> for ErrorCode {
76 type Error = &'static str;
77
78 fn try_from(value: FABRIC_ERROR_CODE) -> Result<Self, Self::Error> {
79 match value {
80 $(
81 $code1 => Ok(Self::$code1),
82 )*
83 $(
85 mssf_com::FabricTypes::FABRIC_ERROR_CODE::$code => Ok(Self::$code),
86 )*
87 _ => Err("Unknown FABRIC_ERROR_CODE")
88 }
89 }
90 }
91 }
92}
93
94impl From<ErrorCode> for crate::Error {
95 fn from(value: ErrorCode) -> Self {
96 crate::Error::from_hresult(HRESULT(value as i32))
97 }
98}
99
100impl From<ErrorCode> for HRESULT {
102 fn from(value: ErrorCode) -> Self {
103 crate::Error::from(value).into()
104 }
105}
106
107impl From<ErrorCode> for crate::WinError {
108 fn from(value: ErrorCode) -> Self {
109 crate::Error::from(value).into()
110 }
111}
112
113impl core::fmt::Display for ErrorCode {
114 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
115 core::write!(f, "{self:?}") }
117}
118
119impl ErrorCode {
120 pub fn is_transient(&self) -> bool {
122 matches!(
123 self,
124 crate::ErrorCode::FABRIC_E_SERVICE_OFFLINE
125 | crate::ErrorCode::FABRIC_E_APPLICATION_UPDATE_IN_PROGRESS
126 | crate::ErrorCode::FABRIC_E_RECONFIGURATION_PENDING
127 | crate::ErrorCode::FABRIC_E_NO_WRITE_QUORUM
128 | crate::ErrorCode::FABRIC_E_REPLICATION_QUEUE_FULL
129 | crate::ErrorCode::FABRIC_E_SERVICE_TOO_BUSY
130 | crate::ErrorCode::FABRIC_E_GATEWAY_NOT_REACHABLE
131 | crate::ErrorCode::E_ABORT | crate::ErrorCode::FABRIC_E_ACQUIRE_FILE_LOCK_FAILED
133 | crate::ErrorCode::FABRIC_E_IMAGEBUILDER_TIMEOUT
134 | crate::ErrorCode::FABRIC_E_CONSTRAINT_KEY_UNDEFINED
135 | crate::ErrorCode::FABRIC_E_STOP_IN_PROGRESS
136 | crate::ErrorCode::FABRIC_E_DATABASE_MIGRATION_IN_PROGRESS
137 )
138 }
139}
140
141define_fabric_error_code!(
144 S_OK,
145 E_ABORT,
146 E_ACCESSDENIED,
147 E_FAIL,
148 E_HANDLE,
149 E_INVALIDARG,
150 E_NOINTERFACE,
151 E_NOTIMPL,
152 E_OUTOFMEMORY,
153 E_POINTER,
154 E_UNEXPECTED,
155 E_FILE_EXISTS,
156 E_DIR_NOT_EMPTY,
157 E_NOT_FOUND,
158 FABRIC_INTERNAL_E_CANNOT_CONNECT,
160 ("Literal for breaking up first error chunk and the fabric errors"),
161 FABRIC_E_COMMUNICATION_ERROR,
162 FABRIC_E_INVALID_ADDRESS,
163 FABRIC_E_INVALID_NAME_URI,
164 FABRIC_E_INVALID_PARTITION_KEY,
165 FABRIC_E_NAME_ALREADY_EXISTS,
166 FABRIC_E_NAME_DOES_NOT_EXIST,
167 FABRIC_E_NAME_NOT_EMPTY,
168 FABRIC_E_NODE_NOT_FOUND,
169 FABRIC_E_NODE_IS_UP,
170 FABRIC_E_NO_WRITE_QUORUM,
171 FABRIC_E_NOT_PRIMARY,
172 FABRIC_E_NOT_READY,
173 FABRIC_E_OPERATION_NOT_COMPLETE,
174 FABRIC_E_PROPERTY_DOES_NOT_EXIST,
175 FABRIC_E_RECONFIGURATION_PENDING,
176 FABRIC_E_REPLICATION_QUEUE_FULL,
177 FABRIC_E_SERVICE_ALREADY_EXISTS,
178 FABRIC_E_SERVICE_DOES_NOT_EXIST,
179 FABRIC_E_SERVICE_OFFLINE,
180 FABRIC_E_SERVICE_METADATA_MISMATCH,
181 FABRIC_E_SERVICE_AFFINITY_CHAIN_NOT_SUPPORTED,
182 FABRIC_E_SERVICE_TYPE_ALREADY_REGISTERED,
183 FABRIC_E_SERVICE_TYPE_NOT_REGISTERED,
184 FABRIC_E_VALUE_TOO_LARGE,
185 FABRIC_E_VALUE_EMPTY,
186 FABRIC_E_PROPERTY_CHECK_FAILED,
187 FABRIC_E_WRITE_CONFLICT,
188 FABRIC_E_ENUMERATION_COMPLETED,
189 FABRIC_E_APPLICATION_TYPE_PROVISION_IN_PROGRESS,
190 FABRIC_E_APPLICATION_TYPE_ALREADY_EXISTS,
191 FABRIC_E_APPLICATION_TYPE_NOT_FOUND,
192 FABRIC_E_APPLICATION_TYPE_IN_USE,
193 FABRIC_E_APPLICATION_ALREADY_EXISTS,
194 FABRIC_E_APPLICATION_NOT_FOUND,
195 FABRIC_E_APPLICATION_UPGRADE_IN_PROGRESS,
196 FABRIC_E_APPLICATION_UPGRADE_VALIDATION_ERROR,
197 FABRIC_E_SERVICE_TYPE_NOT_FOUND,
198 FABRIC_E_SERVICE_TYPE_MISMATCH,
199 FABRIC_E_SERVICE_TYPE_TEMPLATE_NOT_FOUND,
200 FABRIC_E_CONFIGURATION_SECTION_NOT_FOUND,
201 FABRIC_E_CONFIGURATION_PARAMETER_NOT_FOUND,
202 FABRIC_E_INVALID_CONFIGURATION,
203 FABRIC_E_IMAGEBUILDER_VALIDATION_ERROR,
204 FABRIC_E_PARTITION_NOT_FOUND,
205 FABRIC_E_REPLICA_DOES_NOT_EXIST,
206 FABRIC_E_SERVICE_GROUP_ALREADY_EXISTS,
207 FABRIC_E_SERVICE_GROUP_DOES_NOT_EXIST,
208 FABRIC_E_PROCESS_DEACTIVATED,
209 FABRIC_E_PROCESS_ABORTED,
210 FABRIC_E_UPGRADE_FAILED,
211 FABRIC_E_INVALID_CREDENTIAL_TYPE,
212 FABRIC_E_INVALID_X509_FIND_TYPE,
213 FABRIC_E_INVALID_X509_STORE_LOCATION,
214 FABRIC_E_INVALID_X509_STORE_NAME,
215 FABRIC_E_INVALID_X509_THUMBPRINT,
216 FABRIC_E_INVALID_PROTECTION_LEVEL,
217 FABRIC_E_INVALID_X509_STORE,
218 FABRIC_E_INVALID_SUBJECT_NAME,
219 FABRIC_E_INVALID_ALLOWED_COMMON_NAME_LIST,
220 FABRIC_E_INVALID_CREDENTIALS,
221 FABRIC_E_DECRYPTION_FAILED,
222 FABRIC_E_CONFIGURATION_PACKAGE_NOT_FOUND,
223 FABRIC_E_DATA_PACKAGE_NOT_FOUND,
224 FABRIC_E_CODE_PACKAGE_NOT_FOUND,
225 FABRIC_E_SERVICE_ENDPOINT_RESOURCE_NOT_FOUND,
226 FABRIC_E_INVALID_OPERATION,
227 FABRIC_E_OBJECT_CLOSED,
228 FABRIC_E_TIMEOUT,
229 FABRIC_E_FILE_NOT_FOUND,
230 FABRIC_E_DIRECTORY_NOT_FOUND,
231 FABRIC_E_INVALID_DIRECTORY,
232 FABRIC_E_PATH_TOO_LONG,
233 FABRIC_E_IMAGESTORE_IOERROR,
234 FABRIC_E_CORRUPTED_IMAGE_STORE_OBJECT_FOUND,
235 FABRIC_E_APPLICATION_NOT_UPGRADING,
236 FABRIC_E_APPLICATION_ALREADY_IN_TARGET_VERSION,
237 FABRIC_E_IMAGEBUILDER_UNEXPECTED_ERROR,
238 FABRIC_E_FABRIC_VERSION_NOT_FOUND,
239 FABRIC_E_FABRIC_VERSION_IN_USE,
240 FABRIC_E_FABRIC_VERSION_ALREADY_EXISTS,
241 FABRIC_E_FABRIC_ALREADY_IN_TARGET_VERSION,
242 FABRIC_E_FABRIC_NOT_UPGRADING,
243 FABRIC_E_FABRIC_UPGRADE_IN_PROGRESS,
244 FABRIC_E_FABRIC_UPGRADE_VALIDATION_ERROR,
245 FABRIC_E_HEALTH_MAX_REPORTS_REACHED,
246 FABRIC_E_HEALTH_STALE_REPORT,
247 FABRIC_E_KEY_TOO_LARGE,
248 FABRIC_E_KEY_NOT_FOUND,
249 FABRIC_E_SEQUENCE_NUMBER_CHECK_FAILED,
250 FABRIC_E_ENCRYPTION_FAILED,
251 FABRIC_E_INVALID_ATOMIC_GROUP,
252 FABRIC_E_HEALTH_ENTITY_NOT_FOUND,
253 FABRIC_E_SERVICE_MANIFEST_NOT_FOUND,
254 FABRIC_E_RELIABLE_SESSION_TRANSPORT_STARTUP_FAILURE,
255 FABRIC_E_RELIABLE_SESSION_ALREADY_EXISTS,
256 FABRIC_E_RELIABLE_SESSION_CANNOT_CONNECT,
257 FABRIC_E_RELIABLE_SESSION_MANAGER_EXISTS,
258 FABRIC_E_RELIABLE_SESSION_REJECTED,
259 FABRIC_E_RELIABLE_SESSION_MANAGER_ALREADY_LISTENING,
260 FABRIC_E_RELIABLE_SESSION_MANAGER_NOT_FOUND,
261 FABRIC_E_RELIABLE_SESSION_MANAGER_NOT_LISTENING,
262 FABRIC_E_INVALID_SERVICE_TYPE,
263 FABRIC_E_IMAGEBUILDER_TIMEOUT,
264 FABRIC_E_IMAGEBUILDER_ACCESS_DENIED,
265 FABRIC_E_IMAGEBUILDER_INVALID_MSI_FILE,
266 FABRIC_E_SERVICE_TOO_BUSY,
267 FABRIC_E_TRANSACTION_NOT_ACTIVE,
268 FABRIC_E_REPAIR_TASK_ALREADY_EXISTS,
269 FABRIC_E_REPAIR_TASK_NOT_FOUND,
270 FABRIC_E_RELIABLE_SESSION_NOT_FOUND,
271 FABRIC_E_RELIABLE_SESSION_QUEUE_EMPTY,
272 FABRIC_E_RELIABLE_SESSION_QUOTA_EXCEEDED,
273 FABRIC_E_RELIABLE_SESSION_SERVICE_FAULTED,
274 FABRIC_E_RELIABLE_SESSION_INVALID_TARGET_PARTITION,
275 FABRIC_E_TRANSACTION_TOO_LARGE,
276 FABRIC_E_REPLICATION_OPERATION_TOO_LARGE,
277 FABRIC_E_INSTANCE_ID_MISMATCH,
278 FABRIC_E_UPGRADE_DOMAIN_ALREADY_COMPLETED,
279 FABRIC_E_NODE_HAS_NOT_STOPPED_YET,
280 FABRIC_E_INSUFFICIENT_CLUSTER_CAPACITY,
281 FABRIC_E_INVALID_PACKAGE_SHARING_POLICY,
282 FABRIC_E_PREDEPLOYMENT_NOT_ALLOWED,
283 FABRIC_E_INVALID_BACKUP_SETTING,
284 FABRIC_E_MISSING_FULL_BACKUP,
285 FABRIC_E_BACKUP_IN_PROGRESS,
286 FABRIC_E_DUPLICATE_SERVICE_NOTIFICATION_FILTER_NAME,
287 FABRIC_E_INVALID_REPLICA_OPERATION,
288 FABRIC_E_INVALID_REPLICA_STATE,
289 FABRIC_E_LOADBALANCER_NOT_READY,
290 FABRIC_E_INVALID_PARTITION_OPERATION,
291 FABRIC_E_PRIMARY_ALREADY_EXISTS,
292 FABRIC_E_SECONDARY_ALREADY_EXISTS,
293 FABRIC_E_BACKUP_DIRECTORY_NOT_EMPTY,
294 FABRIC_E_FORCE_NOT_SUPPORTED_FOR_REPLICA_OPERATION,
295 FABRIC_E_ACQUIRE_FILE_LOCK_FAILED,
296 FABRIC_E_CONNECTION_DENIED,
297 FABRIC_E_SERVER_AUTHENTICATION_FAILED,
298 FABRIC_E_CONSTRAINT_KEY_UNDEFINED,
299 FABRIC_E_MULTITHREADED_TRANSACTIONS_NOT_ALLOWED,
300 FABRIC_E_INVALID_X509_NAME_LIST,
301 FABRIC_E_VERBOSE_FM_PLACEMENT_HEALTH_REPORTING_REQUIRED,
302 FABRIC_E_GATEWAY_NOT_REACHABLE,
303 FABRIC_E_USER_ROLE_CLIENT_CERTIFICATE_NOT_CONFIGURED,
304 FABRIC_E_TRANSACTION_ABORTED,
305 FABRIC_E_CANNOT_CONNECT,
306 FABRIC_E_MESSAGE_TOO_LARGE,
307 FABRIC_E_CONSTRAINT_NOT_SATISFIED,
308 FABRIC_E_ENDPOINT_NOT_FOUND,
309 FABRIC_E_APPLICATION_UPDATE_IN_PROGRESS,
310 FABRIC_E_DELETE_BACKUP_FILE_FAILED,
311 FABRIC_E_CONNECTION_CLOSED_BY_REMOTE_END,
312 FABRIC_E_INVALID_TEST_COMMAND_STATE,
313 FABRIC_E_TEST_COMMAND_OPERATION_ID_ALREADY_EXISTS,
314 FABRIC_E_CM_OPERATION_FAILED,
315 FABRIC_E_IMAGEBUILDER_RESERVED_DIRECTORY_ERROR,
316 FABRIC_E_CERTIFICATE_NOT_FOUND,
317 FABRIC_E_CHAOS_ALREADY_RUNNING,
318 FABRIC_E_FABRIC_DATA_ROOT_NOT_FOUND,
319 FABRIC_E_INVALID_RESTORE_DATA,
320 FABRIC_E_DUPLICATE_BACKUPS,
321 FABRIC_E_INVALID_BACKUP_CHAIN,
322 FABRIC_E_STOP_IN_PROGRESS,
323 FABRIC_E_ALREADY_STOPPED,
324 FABRIC_E_NODE_IS_DOWN,
325 FABRIC_E_NODE_TRANSITION_IN_PROGRESS,
326 FABRIC_E_INVALID_BACKUP,
327 FABRIC_E_INVALID_INSTANCE_ID,
328 FABRIC_E_INVALID_DURATION,
329 FABRIC_E_RESTORE_SAFE_CHECK_FAILED,
330 FABRIC_E_CONFIG_UPGRADE_FAILED,
331 FABRIC_E_UPLOAD_SESSION_RANGE_NOT_SATISFIABLE,
332 FABRIC_E_UPLOAD_SESSION_ID_CONFLICT,
333 FABRIC_E_INVALID_PARTITION_SELECTOR,
334 FABRIC_E_INVALID_REPLICA_SELECTOR,
335 FABRIC_E_DNS_SERVICE_NOT_FOUND,
336 FABRIC_E_INVALID_DNS_NAME,
337 FABRIC_E_DNS_NAME_IN_USE,
338 FABRIC_E_COMPOSE_DEPLOYMENT_ALREADY_EXISTS,
339 FABRIC_E_COMPOSE_DEPLOYMENT_NOT_FOUND,
340 FABRIC_E_INVALID_FOR_STATEFUL_SERVICES,
341 FABRIC_E_INVALID_FOR_STATELESS_SERVICES,
342 FABRIC_E_ONLY_VALID_FOR_STATEFUL_PERSISTENT_SERVICES,
343 FABRIC_E_INVALID_UPLOAD_SESSION_ID,
344 FABRIC_E_BACKUP_NOT_ENABLED,
345 FABRIC_E_BACKUP_IS_ENABLED,
346 FABRIC_E_BACKUP_POLICY_DOES_NOT_EXIST,
347 FABRIC_E_BACKUP_POLICY_ALREADY_EXISTS,
348 FABRIC_E_RESTORE_IN_PROGRESS,
349 FABRIC_E_RESTORE_SOURCE_TARGET_PARTITION_MISMATCH,
350 FABRIC_E_FAULT_ANALYSIS_SERVICE_NOT_ENABLED,
351 FABRIC_E_CONTAINER_NOT_FOUND,
352 FABRIC_E_OBJECT_DISPOSED,
353 FABRIC_E_NOT_READABLE,
354 FABRIC_E_BACKUPCOPIER_UNEXPECTED_ERROR,
355 FABRIC_E_BACKUPCOPIER_TIMEOUT,
356 FABRIC_E_BACKUPCOPIER_ACCESS_DENIED,
357 FABRIC_E_INVALID_SERVICE_SCALING_POLICY,
358 FABRIC_E_SINGLE_INSTANCE_APPLICATION_ALREADY_EXISTS,
359 FABRIC_E_SINGLE_INSTANCE_APPLICATION_NOT_FOUND,
360 FABRIC_E_VOLUME_ALREADY_EXISTS,
361 FABRIC_E_VOLUME_NOT_FOUND,
362 FABRIC_E_DATABASE_MIGRATION_IN_PROGRESS,
363 FABRIC_E_CENTRAL_SECRET_SERVICE_GENERIC,
364 FABRIC_E_SECRET_INVALID,
365 FABRIC_E_SECRET_VERSION_ALREADY_EXISTS,
366 FABRIC_E_SINGLE_INSTANCE_APPLICATION_UPGRADE_IN_PROGRESS,
367 FABRIC_E_OPERATION_NOT_SUPPORTED,
368 FABRIC_E_COMPOSE_DEPLOYMENT_NOT_UPGRADING,
369 FABRIC_E_SECRET_TYPE_CANNOT_BE_CHANGED,
370 FABRIC_E_NETWORK_NOT_FOUND,
371 FABRIC_E_NETWORK_IN_USE,
372 FABRIC_E_ENDPOINT_NOT_REFERENCED,
373 FABRIC_E_AUXILIARY_ALREADY_EXISTS,
374 FABRIC_E_AUXILIARY_FEATURE_DISABLED,
375 FABRIC_E_BACKUP_NOT_FOUND,
376 FABRIC_E_COPY_ABORTED,
377 FABRIC_E_DATABASE_FILES_CORRUPTED,
378 FABRIC_E_DISABLE_ENABLE_SERVICE_FEATURE_DISABLED,
379 FABRIC_E_INCOMPATIBLE_EXCLUSIVE_SELF_RECONFIGURING,
380 FABRIC_E_INSTANCE_ALREADY_EXISTS,
381 FABRIC_E_INSTANCE_COUNT_UPDATE_NOT_ALLOWED,
382 FABRIC_E_INSUFFICIENT_MAX_LOAD_CAPACITY,
383 FABRIC_E_MAX_ALLOWED_DISABLED_SERVICES_REACHED,
384 FABRIC_E_NODE_TYPE_NOT_FOUND,
385 FABRIC_E_RESTORE_WAITING_FOR_USER_INTERVENTION,
386 FABRIC_E_RUN_TO_COMPLETION_INCOMPATIBLE_WITH_SHARED_PROCESS,
387 FABRIC_E_SERVICE_ALREADY_IN_REQUESTED_STATE,
388 FABRIC_E_SERVICE_DISABLED,
389 FABRIC_E_SERVICE_DISABLE_IN_PROGRESS,
390 FABRIC_E_SKIP_RESTORE_OPERATION,
391 FABRIC_E_STORE_DISK_ERROR,
392 FABRIC_E_STORE_OUT_OF_INSTANCES,
393 FABRIC_E_STORE_OUT_OF_LONG_VALUE_IDS,
394 FABRIC_E_STORE_OUT_OF_SESSIONS,
395 FABRIC_E_STORE_SERIALIZATION_ERROR,
396 FABRIC_E_STORE_SERIALIZED_STREAM_NULL,
397 FABRIC_E_VERSION_STORE_OUT_OF_MEMORY
398);