Skip to content

File syn_cbor_read.h

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

Go to the documentation of this file

#ifndef SYN_CBOR_READ_H
#define SYN_CBOR_READ_H

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

#ifdef __cplusplus
extern "C" {
#endif

/* ── Item type ───────────────────────────────────────────────────────────── */

typedef enum {
    SYN_CBOR_UINT = 0,    
    SYN_CBOR_INT = 1,     
    SYN_CBOR_BYTES = 2,   
    SYN_CBOR_TEXT = 3,    
    SYN_CBOR_ARRAY = 4,   
    SYN_CBOR_MAP = 5,     
    SYN_CBOR_FLOAT = 6,   
    SYN_CBOR_BOOL = 7,    
    SYN_CBOR_NULL = 8,    
    SYN_CBOR_ERROR = 0xFF 
} SYN_CborType;

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

typedef struct {
    const uint8_t *buf; 
    size_t len;         
    size_t pos;         
    bool ok;            
} SYN_CborReader;

/* ── Init ────────────────────────────────────────────────────────────────── */

void syn_cbor_reader_init(SYN_CborReader *r, const uint8_t *buf, size_t len);

/* ── Navigation ──────────────────────────────────────────────────────────── */

SYN_CborType syn_cbor_peek_type(const SYN_CborReader *r);

void syn_cbor_skip(SYN_CborReader *r);

/* ── Collections ─────────────────────────────────────────────────────────── */

size_t syn_cbor_read_map_begin(SYN_CborReader *r);

size_t syn_cbor_read_array_begin(SYN_CborReader *r);

/* ── Scalars ─────────────────────────────────────────────────────────────── */

uint64_t syn_cbor_read_uint(SYN_CborReader *r);

int64_t syn_cbor_read_int(SYN_CborReader *r);

float syn_cbor_read_float(SYN_CborReader *r);

bool syn_cbor_read_bool(SYN_CborReader *r);

void syn_cbor_read_null(SYN_CborReader *r);

/* ── Strings ─────────────────────────────────────────────────────────────── */

size_t syn_cbor_read_text(SYN_CborReader *r, char *buf, size_t cap);

size_t syn_cbor_read_bytes(SYN_CborReader *r, uint8_t *buf, size_t cap);

/* ── Status ──────────────────────────────────────────────────────────────── */

static inline bool syn_cbor_reader_ok(const SYN_CborReader *r)
{
    return r->ok;
}

static inline bool syn_cbor_reader_done(const SYN_CborReader *r)
{
    return r->pos >= r->len;
}

#ifdef __cplusplus
}
#endif

#endif /* SYN_CBOR_READ_H */