#ifndef TSL_VALUE_H #define TSL_VALUE_H #include #include #include "string_view.h" typedef enum { TSL_TYPE_NULL, TSL_TYPE_NUMBER, TSL_TYPE_STRING, TSL_TYPE_STRING_VIEW, TSL_TYPE_BOOL, TSL_TYPE_LIST, TSL_TYPE_MAP, TSL_TYPE_USERDATA } TslType; /* TODO: Support BigInt */ typedef double TslNumber; typedef enum { TSL_FALSE, TSL_TRUE } TslBool; typedef struct { uint8_t *data; size_t size; } TslString; /* TODO: Implement this */ typedef struct { void *data; size_t size; } TslList; /* TODO: Implement this */ typedef struct { void *data; } TslMap; typedef struct { union { TslNumber number; TslString *string; TslStringView string_view; TslBool boolean; TslList *list; TslMap *map; void *userdata; } data; uint8_t type; } TslValue; uint64_t tsl_value_hash(const TslValue *value); /* Returns 1 if equal, otherwise returns 0 */ int tsl_value_equals(const TslValue *lhs, const TslValue *rhs); #endif /* TSL_VALUE_H */