Skip to content

File syn_json_read.h

File List > src > syntropic > util > syn_json_read.h

Go to the documentation of this file

#ifndef SYN_JSON_READ_H
#define SYN_JSON_READ_H

#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif

/* ── Token types ───────────────────────────────────────────────────────── */

typedef enum {
    SYN_JSON_NONE = 0,   
    SYN_JSON_STRING = 1, 
    SYN_JSON_NUMBER = 2, 
    SYN_JSON_BOOL = 3,   
    SYN_JSON_NULL = 4,   
    SYN_JSON_OBJECT = 5, 
    SYN_JSON_ARRAY = 6,  
} SYN_JsonType;

/* ── Token ─────────────────────────────────────────────────────────────── */

#define SYN_JSON_MAX_TOKENS 32

typedef struct {
    SYN_JsonType type; 
    const char *key;   
    const char *value; 
    int32_t int_val;   
    uint8_t depth;     
} SYN_JsonToken;

/* ── Reader ────────────────────────────────────────────────────────────── */

typedef struct {
    SYN_JsonToken tokens[SYN_JSON_MAX_TOKENS]; 
    size_t token_count;                        
    bool valid;                                
} SYN_JsonReader;

/* ── API ───────────────────────────────────────────────────────────────── */

bool syn_json_parse(SYN_JsonReader *r, char *json, size_t len);

const SYN_JsonToken *syn_json_find(const SYN_JsonReader *r, const char *key);

bool syn_json_get_str(const SYN_JsonReader *r, const char *key, char *out, size_t out_sz);

bool syn_json_get_int(const SYN_JsonReader *r, const char *key, int32_t *out);

bool syn_json_get_bool(const SYN_JsonReader *r, const char *key, bool *out);

bool syn_json_is_null(const SYN_JsonReader *r, const char *key);

SYN_JsonType syn_json_get_type(const SYN_JsonReader *r, const char *key);

#ifdef __cplusplus
}
#endif

#endif /* SYN_JSON_READ_H */