#ifndef TOBI_DG_H #define TOBI_DG_H #include typedef enum tobi_diag_level { TOBI_DIAG_WARN, TOBI_DIAG_ERROR } tobi_diag_level; typedef struct tobi_diag { tobi_diag_level level; size_t off; char *source; size_t input_index; int has_source; char *msg; } tobi_diag; typedef struct tobi_diag_list { tobi_diag *items; size_t len; size_t cap; } tobi_diag_list; void tobi_diag_init(tobi_diag_list *dl); void tobi_diag_free(tobi_diag_list *dl); void tobi_diag_add(tobi_diag_list *dl, tobi_diag_level level, size_t off, const char *fmt, ...); void tobi_diag_add_source(tobi_diag_list *dl, tobi_diag_level level, size_t off, const char *source, size_t input_index, int has_source, const char *fmt, ...); void tobi_diag_set_source(tobi_diag_list *dl, const char *source, size_t input_index); int tobi_diag_has_error(const tobi_diag_list *dl); const char *tobi_diag_level_name(tobi_diag_level level); #endif