#ifndef LEXER_STATES_H
#define LEXER_STATES_H

#include "aliases.h"
#include <stdbool.h>

#define VALID_JSON true
#define INVALID_JSON false

typedef enum {
  TK_L_BRACE,
  TK_R_BRACE,
  TK_L_BRACKET,
  TK_R_BRACKET,
  TK_COLON,
  TK_COMMA,
  TK_NULL,
  TK_TRUE,
  TK_FALSE,
  TK_STRING_LITERAL,
  TK_INTEGER_LITERAL,
  TK_DOUBLE_LITERAL,
} token_type_t;

typedef union {
  void *no_val;
  i64 num_int;
  f64 num_frac;
} token_value_t;

typedef struct {
  token_type_t type;
  token_value_t value;
} token_t;

typedef struct lexer lexer_t;

bool validate_json(char *json);

#endif // !LEXER_STATES_H