#ifndef NSTD_CORE_OPTIONAL_H
#define NSTD_CORE_OPTIONAL_H
#include "../nstd.h"
#define NSTD_OPTIONAL_NONE 0
#define NSTD_OPTIONAL_SOME 1
#define NSTDOptional(T) \
typedef struct { \
NSTDUInt8 status; \
union { \
T some; \
} value; \
}
NSTDOptional(NSTDAny) NSTDOptionalAny;
NSTDOptional(NSTDAnyMut) NSTDOptionalAnyMut;
NSTDOptional(NSTDBool) NSTDOptionalBool;
NSTDOptional(NSTDChar) NSTDOptionalChar;
NSTDOptional(NSTDChar8) NSTDOptionalChar8;
NSTDOptional(NSTDChar16) NSTDOptionalChar16;
NSTDOptional(NSTDChar32) NSTDOptionalChar32;
NSTDOptional(NSTDFloat32) NSTDOptionalFloat32;
NSTDOptional(NSTDFloat64) NSTDOptionalFloat64;
NSTDOptional(NSTDInt) NSTDOptionalInt;
NSTDOptional(NSTDUInt) NSTDOptionalUInt;
NSTDOptional(NSTDInt8) NSTDOptionalInt8;
NSTDOptional(NSTDUInt8) NSTDOptionalUInt8;
NSTDOptional(NSTDInt16) NSTDOptionalInt16;
NSTDOptional(NSTDUInt16) NSTDOptionalUInt16;
NSTDOptional(NSTDInt32) NSTDOptionalInt32;
NSTDOptional(NSTDUInt32) NSTDOptionalUInt32;
NSTDOptional(NSTDInt64) NSTDOptionalInt64;
NSTDOptional(NSTDUInt64) NSTDOptionalUInt64;
NSTDOptional(NSTDRef) NSTDOptionalRef;
NSTDOptional(NSTDRefMut) NSTDOptionalRefMut;
NSTDOptional(NSTDAnyRef) NSTDOptionalAnyRef;
NSTDOptional(NSTDAnyRefMut) NSTDOptionalAnyRefMut;
#endif