Loading...
Searching...
No Matches
Go to the documentation of this file.
10#define CU_RESULT_NAME(NAME) NAME##_Result
12#define CU_RESULT_FN(NAME, SUFFIX) CU_CONCAT(CU_RESULT_NAME(NAME), SUFFIX)
15#define CU_RESULT_HEADER(NAME, T, E) \
16 CU_RESULT_NAME(NAME) CU_RESULT_FN(NAME, _ok)(T value); \
17 CU_RESULT_NAME(NAME) CU_RESULT_FN(NAME, _error)(E error); \
18 bool CU_RESULT_FN(NAME, _is_ok)(CU_RESULT_NAME(NAME) * result); \
19 T CU_RESULT_FN(NAME, _unwrap)(CU_RESULT_NAME(NAME) * result); \
20 E CU_RESULT_FN(NAME, _unwrap_error)(CU_RESULT_NAME(NAME) * result);
23#define CU_RESULT_DECL(NAME, T, E) \
30 } CU_RESULT_NAME(NAME); \
31 CU_RESULT_HEADER(NAME, T, E)
34#define CU_RESULT_IMPL(NAME, T, E) \
35 CU_RESULT_NAME(NAME) CU_RESULT_FN(NAME, _ok)(T value) { \
36 CU_RESULT_NAME(NAME) result = {0}; \
37 result.value = value; \
42 CU_RESULT_NAME(NAME) CU_RESULT_FN(NAME, _error)(E error) { \
43 CU_RESULT_NAME(NAME) result = {0}; \
44 result.error = error; \
45 result.isOk = false; \
49 bool CU_RESULT_FN(NAME, _is_ok)(CU_RESULT_NAME(NAME) * result) { \
50 return result->isOk; \
53 T CU_RESULT_FN(NAME, _unwrap)(CU_RESULT_NAME(NAME) * result) { \
54 if (!result->isOk) { \
55 CU_DIE("Attempted to unwrap an error result"); \
57 return result->value; \
60 E CU_RESULT_FN(NAME, _unwrap_error)(CU_RESULT_NAME(NAME) * result) { \
62 CU_DIE("Attempted to unwrap an ok result as error"); \
64 return result->error; \