Skip to content

Commit 1113445

Browse files
add exception class
1 parent bbcacc6 commit 1113445

File tree

1 file changed

+180
-0
lines changed

1 file changed

+180
-0
lines changed

code/logic/fossil/io/error.h

Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,186 @@ const char *fossil_io_what(fossil_status_t error_code);
183183

184184
#ifdef __cplusplus
185185
}
186+
187+
/**
188+
* This namespace provides a set of functions for handling input and output operations.
189+
*/
190+
namespace fossil {
191+
/**
192+
* This namespace provides a set of functions for handling input and output operations.
193+
*/
194+
namespace io {
195+
/**
196+
* Enum class for error codes.
197+
*/
198+
enum class ErrorCode {
199+
// Success and General Errors
200+
OK = FOSSIL_ERROR_OK,
201+
NULL_POINTER = FOSSIL_ERROR_NULL_POINTER,
202+
INVALID_ARGUMENT = FOSSIL_ERROR_INVALID_ARGUMENT,
203+
TYPE_MISMATCH = FOSSIL_ERROR_TYPE_MISMATCH,
204+
INVALID_OPERATION = FOSSIL_ERROR_INVALID_OPERATION,
205+
UNKNOWN = FOSSIL_ERROR_UNKNOWN,
206+
CUSTOM = FOSSIL_ERROR_CUSTOM,
207+
INTERNAL = FOSSIL_ERROR_INTERNAL,
208+
UNKNOWN_ERROR_CODE = FOSSIL_ERROR_UNKNOWN_ERROR_CODE,
209+
210+
// Arithmetic Errors
211+
OVERFLOW_INT = FOSSIL_ERROR_OVERFLOW_INT,
212+
UNDERFLOW_INT = FOSSIL_ERROR_UNDERFLOW_INT,
213+
OVERFLOW_FLOAT = FOSSIL_ERROR_OVERFLOW_FLOAT,
214+
UNDERFLOW_FLOAT = FOSSIL_ERROR_UNDERFLOW_FLOAT,
215+
DIVISION_BY_ZERO = FOSSIL_ERROR_DIVISION_BY_ZERO,
216+
INVALID_CAST = FOSSIL_ERROR_INVALID_CAST,
217+
218+
// Memory Errors
219+
OUT_OF_MEMORY = FOSSIL_ERROR_OUT_OF_MEMORY,
220+
MEMORY_CORRUPTION = FOSSIL_ERROR_MEMORY_CORRUPTION,
221+
BUFFER_OVERFLOW = FOSSIL_ERROR_BUFFER_OVERFLOW,
222+
BUFFER_UNDERFLOW = FOSSIL_ERROR_BUFFER_UNDERFLOW,
223+
BUFFER_OVERFLOW_STR = FOSSIL_ERROR_BUFFER_OVERFLOW_STR,
224+
BUFFER_OVERFLOW_FMT = FOSSIL_ERROR_BUFFER_OVERFLOW_FMT,
225+
BUFFER_OVERFLOW_FILE = FOSSIL_ERROR_BUFFER_OVERFLOW_FILE,
226+
BUFFER_OVERFLOW_NET = FOSSIL_ERROR_BUFFER_OVERFLOW_NET,
227+
BUFFER_OVERFLOW_CMD = FOSSIL_ERROR_BUFFER_OVERFLOW_CMD,
228+
BUFFER_OVERFLOW_ENV = FOSSIL_ERROR_BUFFER_OVERFLOW_ENV,
229+
MEMORY_LEAK = FOSSIL_ERROR_MEMORY_LEAK,
230+
MEMORY_ALLOCATION_FAILURE = FOSSIL_ERROR_MEMORY_ALLOCATION_FAILURE,
231+
MEMORY_ALIGNMENT_ISSUE = FOSSIL_ERROR_MEMORY_ALIGNMENT_ISSUE,
232+
233+
// File and I/O Errors
234+
FILE_CORRUPTION = FOSSIL_ERROR_FILE_CORRUPTION,
235+
FILE_NOT_FOUND = FOSSIL_ERROR_FILE_NOT_FOUND,
236+
DIRECTORY_NOT_FOUND = FOSSIL_ERROR_DIRECTORY_NOT_FOUND,
237+
TOO_MANY_OPEN_FILES = FOSSIL_ERROR_TOO_MANY_OPEN_FILES,
238+
IO = FOSSIL_ERROR_IO,
239+
UNSUPPORTED_OPERATION = FOSSIL_ERROR_UNSUPPORTED_OPERATION,
240+
PIPE = FOSSIL_ERROR_PIPE,
241+
SYSTEM_CALL_FAILED = FOSSIL_ERROR_SYSTEM_CALL_FAILED,
242+
PERMISSION_DENIED = FOSSIL_ERROR_PERMISSION_DENIED,
243+
READ_ONLY_FILESYSTEM = FOSSIL_ERROR_READ_ONLY_FILESYSTEM,
244+
FILE_LOCK_FAILED = FOSSIL_ERROR_FILE_LOCK_FAILED,
245+
FILE_WRITE_FAILED = FOSSIL_ERROR_FILE_WRITE_FAILED,
246+
FILE_READ_FAILED = FOSSIL_ERROR_FILE_READ_FAILED,
247+
FILE_SEEK_FAILED = FOSSIL_ERROR_FILE_SEEK_FAILED,
248+
FILE_CLOSE_FAILED = FOSSIL_ERROR_FILE_CLOSE_FAILED,
249+
FILE_TRUNCATE_FAILED = FOSSIL_ERROR_FILE_TRUNCATE_FAILED,
250+
FILE_TOO_LARGE = FOSSIL_ERROR_FILE_TOO_LARGE,
251+
DEVICE_NOT_READY = FOSSIL_ERROR_DEVICE_NOT_READY,
252+
DEVICE_REMOVED = FOSSIL_ERROR_DEVICE_REMOVED,
253+
254+
// Resource and Process Errors
255+
RESOURCE_UNAVAILABLE = FOSSIL_ERROR_RESOURCE_UNAVAILABLE,
256+
BUSY = FOSSIL_ERROR_BUSY,
257+
DEADLOCK = FOSSIL_ERROR_DEADLOCK,
258+
INTERRUPTED = FOSSIL_ERROR_INTERRUPTED,
259+
LIMIT_REACHED = FOSSIL_ERROR_LIMIT_REACHED,
260+
PROCESS = FOSSIL_ERROR_PROCESS,
261+
PROCESS_CREATION_FAILED = FOSSIL_ERROR_PROCESS_CREATION_FAILED,
262+
PROCESS_EXITED_WITH_ERROR = FOSSIL_ERROR_PROCESS_EXITED_WITH_ERROR,
263+
PROCESS_TIMEOUT = FOSSIL_ERROR_PROCESS_TIMEOUT,
264+
RESOURCE_DEPLETION = FOSSIL_ERROR_RESOURCE_DEPLETION,
265+
THREAD_CREATION_FAILED = FOSSIL_ERROR_THREAD_CREATION_FAILED,
266+
THREAD_TERMINATION_FAILED = FOSSIL_ERROR_THREAD_TERMINATION_FAILED,
267+
268+
// Hardware Errors
269+
HARDWARE_FAILURE = FOSSIL_ERROR_HARDWARE_FAILURE,
270+
HARD_DISK_FAILURE = FOSSIL_ERROR_HARD_DISK_FAILURE,
271+
GPU_FAILURE = FOSSIL_ERROR_GPU_FAILURE,
272+
CPU_OVERHEAT = FOSSIL_ERROR_CPU_OVERHEAT,
273+
MEMORY_FAILURE = FOSSIL_ERROR_MEMORY_FAILURE,
274+
HARDWARE_OVERLOAD = FOSSIL_ERROR_HARDWARE_OVERLOAD,
275+
DEVICE_TIMEOUT = FOSSIL_ERROR_DEVICE_TIMEOUT,
276+
POWER_SUPPLY_FAILURE = FOSSIL_ERROR_POWER_SUPPLY_FAILURE,
277+
278+
// Network Errors
279+
NETWORK_FAILURE = FOSSIL_ERROR_NETWORK_FAILURE,
280+
TIMEOUT = FOSSIL_ERROR_TIMEOUT,
281+
UNKNOWN_HOST = FOSSIL_ERROR_UNKNOWN_HOST,
282+
CONNECTION_REFUSED = FOSSIL_ERROR_CONNECTION_REFUSED,
283+
NETWORK_UNREACHABLE = FOSSIL_ERROR_NETWORK_UNREACHABLE,
284+
PROTOCOL = FOSSIL_ERROR_PROTOCOL,
285+
CONNECTION_RESET = FOSSIL_ERROR_CONNECTION_RESET,
286+
DNS_RESOLUTION_FAILED = FOSSIL_ERROR_DNS_RESOLUTION_FAILED,
287+
NETWORK_CONGESTION = FOSSIL_ERROR_NETWORK_CONGESTION,
288+
BANDWIDTH_EXCEEDED = FOSSIL_ERROR_BANDWIDTH_EXCEEDED,
289+
FIREWALL_BLOCKED = FOSSIL_ERROR_FIREWALL_BLOCKED,
290+
SSL_HANDSHAKE_FAILED = FOSSIL_ERROR_SSL_HANDSHAKE_FAILED,
291+
CERTIFICATE_EXPIRED = FOSSIL_ERROR_CERTIFICATE_EXPIRED,
292+
CERTIFICATE_REVOKED = FOSSIL_ERROR_CERTIFICATE_REVOKED,
293+
294+
// Security Errors
295+
SQL_INJECTION = FOSSIL_ERROR_SQL_INJECTION,
296+
XSS_ATTACK = FOSSIL_ERROR_XSS_ATTACK,
297+
CSRF_ATTACK = FOSSIL_ERROR_CSRF_ATTACK,
298+
FORMAT_STRING_ATTACK = FOSSIL_ERROR_FORMAT_STRING_ATTACK,
299+
CRYPTOGRAPHIC_WEAKNESS = FOSSIL_ERROR_CRYPTOGRAPHIC_WEAKNESS,
300+
INSECURE_RANDOMNESS = FOSSIL_ERROR_INSECURE_RANDOMNESS,
301+
INSECURE_CONFIGURATION = FOSSIL_ERROR_INSECURE_CONFIGURATION,
302+
INSECURE_DESERIALIZATION = FOSSIL_ERROR_INSECURE_DESERIALIZATION,
303+
INSECURE_FILE_HANDLING = FOSSIL_ERROR_INSECURE_FILE_HANDLING,
304+
INSECURE_TEMPORARY_FILES = FOSSIL_ERROR_INSECURE_TEMPORARY_FILES,
305+
INSECURE_COMMUNICATION = FOSSIL_ERROR_INSECURE_COMMUNICATION,
306+
INSECURE_AUTHENTICATION = FOSSIL_ERROR_INSECURE_AUTHENTICATION,
307+
INSECURE_ACCESS_CONTROL = FOSSIL_ERROR_INSECURE_ACCESS_CONTROL,
308+
SESSION_HIJACKING = FOSSIL_ERROR_SESSION_HIJACKING,
309+
DATA_TAMPERING = FOSSIL_ERROR_DATA_TAMPERING,
310+
MAN_IN_THE_MIDDLE_ATTACK = FOSSIL_ERROR_MAN_IN_THE_MIDDLE_ATTACK,
311+
PRIVILEGE_ESCALATION = FOSSIL_ERROR_PRIVILEGE_ESCALATION,
312+
313+
// User-Related and External Errors
314+
USER_ABORT = FOSSIL_ERROR_USER_ABORT,
315+
SIGNAL = FOSSIL_ERROR_SIGNAL,
316+
USER_INPUT_TOO_LARGE = FOSSIL_ERROR_USER_INPUT_TOO_LARGE,
317+
USER_INPUT_INVALID_FORMAT = FOSSIL_ERROR_USER_INPUT_INVALID_FORMAT,
318+
USER_PERMISSION_REJECTED = FOSSIL_ERROR_USER_PERMISSION_REJECTED,
319+
320+
// Database Errors
321+
DATABASE_CONNECTION_FAILED = FOSSIL_ERROR_DATABASE_CONNECTION_FAILED,
322+
DATABASE_QUERY_FAILED = FOSSIL_ERROR_DATABASE_QUERY_FAILED,
323+
DATABASE_TIMEOUT = FOSSIL_ERROR_DATABASE_TIMEOUT,
324+
DATABASE_CORRUPTION = FOSSIL_ERROR_DATABASE_CORRUPTION,
325+
DATABASE_DEADLOCK = FOSSIL_ERROR_DATABASE_DEADLOCK,
326+
DATABASE_LOCK_FAILED = FOSSIL_ERROR_DATABASE_LOCK_FAILED,
327+
328+
// Serialization and Deserialization Errors
329+
SERIALIZATION_FAILED = FOSSIL_ERROR_SERIALIZATION_FAILED,
330+
DESERIALIZATION_FAILED = FOSSIL_ERROR_DESERIALIZATION_FAILED,
331+
INVALID_SERIALIZATION_FORMAT = FOSSIL_ERROR_INVALID_SERIALIZATION_FORMAT,
332+
DATA_CORRUPTION = FOSSIL_ERROR_DATA_CORRUPTION,
333+
334+
// Miscellaneous Errors
335+
INDEX_OUT_OF_BOUNDS = FOSSIL_ERROR_INDEX_OUT_OF_BOUNDS,
336+
FORMAT = FOSSIL_ERROR_FORMAT,
337+
INCOMPATIBLE_VERSION = FOSSIL_ERROR_INCOMPATIBLE_VERSION,
338+
JSON_PARSING_FAILED = FOSSIL_ERROR_JSON_PARSING_FAILED,
339+
XML_PARSING_FAILED = FOSSIL_ERROR_XML_PARSING_FAILED,
340+
YAML_PARSING_FAILED = FOSSIL_ERROR_YAML_PARSING_FAILED,
341+
INVALID_CHECKSUM = FOSSIL_ERROR_INVALID_CHECKSUM,
342+
TIMER_EXPIRED = FOSSIL_ERROR_TIMER_EXPIRED
343+
};
344+
345+
/**
346+
* Exception class for handling errors.
347+
*/
348+
class Error : public std::exception {
349+
public:
350+
explicit Error(ErrorCode code) : code_(code) {}
351+
352+
const char* what() const noexcept override {
353+
return fossil_io_what(static_cast<fossil_status_t>(code_));
354+
}
355+
356+
ErrorCode code() const noexcept {
357+
return code_;
358+
}
359+
360+
private:
361+
ErrorCode code_;
362+
};
363+
}
364+
}
365+
186366
#endif
187367

188368
#endif /* FOSSIL_IO_FRAMEWORK_H */

0 commit comments

Comments
 (0)