34 lines
697 B
C
34 lines
697 B
C
#include <stdbool.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
#define fn(decl, type) type decl
|
|
#define let(decl, type) const type decl
|
|
#define let_mut(decl, type) type decl
|
|
|
|
#define print printf
|
|
#define loop while(true)
|
|
#define Ok(); return 0
|
|
#define Err(); return 1
|
|
|
|
#define enum union
|
|
|
|
// Rust like return impl
|
|
#define Result_impl(T, E) \
|
|
typedef struct { \
|
|
bool is_valid; \
|
|
enum { \
|
|
T data; \
|
|
E err; \
|
|
}; \
|
|
} Result_##T##_##E;
|
|
#define Result(T, E) Result_##T##_##E
|
|
#define Result_unwrap_impl(T, E) \
|
|
T Result_##T##_unwrap (Result(T, E) result) { \
|
|
if (result.is_valid) \
|
|
return result.data; \
|
|
\
|
|
fprintf(stderr, "%s\n", result.err); \
|
|
exit(1); \
|
|
}
|