mccu/include/mcutil/result.h

35 lines
1.0 KiB
C
Raw Permalink Normal View History

2025-01-28 21:42:26 +00:00
#ifndef _H_MCU_RESULT
#define _H_MCU_RESULT
2025-01-29 21:21:18 +00:00
#include "mcutil/collect/str.h"
2025-01-28 21:42:26 +00:00
#include <stdbool.h>
typedef struct mcu_error_s {
mcu_str_t reason;
const char* file;
int line;
} mcu_error_t;
typedef struct mcu_result_s {
union {
void* res;
mcu_error_t err;
};
bool is_err;
} mcu_result_t;
#define Ok(val) (mcu_result_t){ .is_err=false, .res = val }
#define Err(_reason) (mcu_result_t){ .is_err=true, .err = (mcu_error_t){ .reason=mcu_str_new(_reason), .file=__FILE__, .line=__LINE__ }}
#define mcu_result_unwrap(result) ({ \
if ((result).is_err) { \
printf("%s:%d: PANIC: Unwrapped on error value%s\n", \
(result).err.file, (result).err.line, \
(result).err.reason.inner); \
exit(1); \
}; \
(result).res; \
})
#endif // _H_MCU_RESULT