1
0
mirror of git://jb55.com/damus synced 2024-09-18 19:23:49 +00:00
damus/nostrdb/bindings/c/meta_json_parser.h
2023-08-28 08:17:25 -07:00

117 lines
4.9 KiB
C

#ifndef META_JSON_PARSER_H
#define META_JSON_PARSER_H
/* Generated by flatcc 0.6.1 FlatBuffers schema compiler for C by dvide.com */
#include "flatcc_json_parser.h"
#include "flatcc_prologue.h"
/*
* Parses the default root table or struct of the schema and constructs a FlatBuffer.
*
* Builder `B` must be initialized. `ctx` can be null but will hold
* hold detailed error info on return when available.
* Returns 0 on success, or error code.
* `flags` : 0 by default, `flatcc_json_parser_f_skip_unknown` silently
* ignores unknown table and structs fields, and union types.
*/
static int meta_parse_json(flatcc_builder_t *B, flatcc_json_parser_t *ctx,
const char *buf, size_t bufsiz, int flags);
static const char *NdbEventMeta_parse_json_table(flatcc_json_parser_t *ctx, const char *buf, const char *end, flatcc_builder_ref_t *result);
static const char *meta_local_json_parser_enum(flatcc_json_parser_t *ctx, const char *buf, const char *end,
int *value_type, uint64_t *value, int *aggregate);
static const char *meta_global_json_parser_enum(flatcc_json_parser_t *ctx, const char *buf, const char *end,
int *value_type, uint64_t *value, int *aggregate);
static const char *NdbEventMeta_parse_json_table(flatcc_json_parser_t *ctx, const char *buf, const char *end, flatcc_builder_ref_t *result)
{
int more;
void *pval;
flatcc_builder_ref_t ref, *pref;
const char *mark;
uint64_t w;
*result = 0;
if (flatcc_builder_start_table(ctx->ctx, 1)) goto failed;
buf = flatcc_json_parser_object_start(ctx, buf, end, &more);
while (more) {
buf = flatcc_json_parser_symbol_start(ctx, buf, end);
w = flatcc_json_parser_symbol_part(buf, end);
if (w == 0x7265636569766564) { /* descend "received" */
buf += 8;
w = flatcc_json_parser_symbol_part(buf, end);
if ((w & 0xffffff0000000000) == 0x5f61740000000000) { /* "_at" */
buf = flatcc_json_parser_match_symbol(ctx, (mark = buf), end, 3);
if (mark != buf) {
int32_t val = 0;
static flatcc_json_parser_integral_symbol_f *symbolic_parsers[] = {
meta_local_json_parser_enum,
meta_global_json_parser_enum, 0 };
buf = flatcc_json_parser_int32(ctx, (mark = buf), end, &val);
if (mark == buf) {
buf = flatcc_json_parser_symbolic_int32(ctx, (mark = buf), end, symbolic_parsers, &val);
if (buf == mark || buf == end) goto failed;
}
if (val != INT32_C(0) || (ctx->flags & flatcc_json_parser_f_force_add)) {
if (!(pval = flatcc_builder_table_add(ctx->ctx, 0, 4, 4))) goto failed;
flatbuffers_int32_write_to_pe(pval, val);
}
} else {
buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
}
} else { /* "_at" */
buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
} /* "_at" */
} else { /* descend "received" */
buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
} /* descend "received" */
buf = flatcc_json_parser_object_end(ctx, buf, end, &more);
}
if (ctx->error) goto failed;
if (!(*result = flatcc_builder_end_table(ctx->ctx))) goto failed;
return buf;
failed:
return flatcc_json_parser_set_error(ctx, buf, end, flatcc_json_parser_error_runtime);
}
static inline int NdbEventMeta_parse_json_as_root(flatcc_builder_t *B, flatcc_json_parser_t *ctx, const char *buf, size_t bufsiz, int flags, const char *fid)
{
return flatcc_json_parser_table_as_root(B, ctx, buf, bufsiz, flags, fid, NdbEventMeta_parse_json_table);
}
static const char *meta_local_json_parser_enum(flatcc_json_parser_t *ctx, const char *buf, const char *end,
int *value_type, uint64_t *value, int *aggregate)
{
/* Scope has no enum / union types to look up. */
return buf; /* unmatched; */
}
static const char *meta_global_json_parser_enum(flatcc_json_parser_t *ctx, const char *buf, const char *end,
int *value_type, uint64_t *value, int *aggregate)
{
/* Global scope has no enum / union types to look up. */
return buf; /* unmatched; */
}
static int meta_parse_json(flatcc_builder_t *B, flatcc_json_parser_t *ctx,
const char *buf, size_t bufsiz, int flags)
{
flatcc_json_parser_t parser;
flatcc_builder_ref_t root;
ctx = ctx ? ctx : &parser;
flatcc_json_parser_init(ctx, B, buf, buf + bufsiz, flags);
if (flatcc_builder_start_buffer(B, 0, 0, 0)) return -1;
NdbEventMeta_parse_json_table(ctx, buf, buf + bufsiz, &root);
if (ctx->error) {
return ctx->error;
}
if (!flatcc_builder_end_buffer(B, root)) return -1;
ctx->end_loc = buf;
return 0;
}
#include "flatcc_epilogue.h"
#endif /* META_JSON_PARSER_H */