nostrdb

an unfairly fast embedded nostr database backed by lmdb
git clone git://jb55.com/nostrdb
Log | Files | Refs | Submodules | README | LICENSE

profile_json_parser.h (23412B)


      1 #ifndef PROFILE_JSON_PARSER_H
      2 #define PROFILE_JSON_PARSER_H
      3 
      4 /* Generated by flatcc 0.6.1 FlatBuffers schema compiler for C by dvide.com */
      5 
      6 #include "flatcc/flatcc_json_parser.h"
      7 #include "flatcc/flatcc_prologue.h"
      8 
      9 /*
     10  * Parses the default root table or struct of the schema and constructs a FlatBuffer.
     11  *
     12  * Builder `B` must be initialized. `ctx` can be null but will hold
     13  * hold detailed error info on return when available.
     14  * Returns 0 on success, or error code.
     15  * `flags` : 0 by default, `flatcc_json_parser_f_skip_unknown` silently
     16  * ignores unknown table and structs fields, and union types.
     17  */
     18 static int profile_parse_json(flatcc_builder_t *B, flatcc_json_parser_t *ctx,
     19         const char *buf, size_t bufsiz, int flags);
     20 
     21 static const char *NdbProfile_parse_json_table(flatcc_json_parser_t *ctx, const char *buf, const char *end, flatcc_builder_ref_t *result);
     22 static const char *NdbProfileRecord_parse_json_table(flatcc_json_parser_t *ctx, const char *buf, const char *end, flatcc_builder_ref_t *result);
     23 static const char *profile_local_json_parser_enum(flatcc_json_parser_t *ctx, const char *buf, const char *end,
     24 int *value_type, uint64_t *value, int *aggregate);
     25 static const char *profile_global_json_parser_enum(flatcc_json_parser_t *ctx, const char *buf, const char *end,
     26         int *value_type, uint64_t *value, int *aggregate);
     27 
     28 static const char *NdbProfile_parse_json_table(flatcc_json_parser_t *ctx, const char *buf, const char *end, flatcc_builder_ref_t *result)
     29 {
     30     int more;
     31     void *pval;
     32     flatcc_builder_ref_t ref, *pref;
     33     const char *mark;
     34     uint64_t w;
     35 
     36     *result = 0;
     37     if (flatcc_builder_start_table(ctx->ctx, 12)) goto failed;
     38     buf = flatcc_json_parser_object_start(ctx, buf, end, &more);
     39     while (more) {
     40         buf = flatcc_json_parser_symbol_start(ctx, buf, end);
     41         w = flatcc_json_parser_symbol_part(buf, end);
     42         if (w < 0x6c75643036000000) { /* branch "lud06" */
     43             if (w < 0x64616d75735f646f) { /* branch "damus_do" */
     44                 if ((w & 0xffffffffffff0000) == 0x62616e6e65720000) { /* "banner" */
     45                     buf = flatcc_json_parser_match_symbol(ctx, (mark = buf), end, 6);
     46                     if (mark != buf) {
     47                         buf = flatcc_json_parser_build_string(ctx, buf, end, &ref);
     48                         if (!ref || !(pref = flatcc_builder_table_add_offset(ctx->ctx, 4))) goto failed;
     49                         *pref = ref;
     50                     } else {
     51                         buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
     52                     }
     53                 } else { /* "banner" */
     54                     if ((w & 0xffffffffff000000) == 0x61626f7574000000) { /* "about" */
     55                         buf = flatcc_json_parser_match_symbol(ctx, (mark = buf), end, 5);
     56                         if (mark != buf) {
     57                             buf = flatcc_json_parser_build_string(ctx, buf, end, &ref);
     58                             if (!ref || !(pref = flatcc_builder_table_add_offset(ctx->ctx, 2))) goto failed;
     59                             *pref = ref;
     60                         } else {
     61                             buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
     62                         }
     63                     } else { /* "about" */
     64                         buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
     65                     } /* "about" */
     66                 } /* "banner" */
     67             } else { /* branch "damus_do" */
     68                 if (w == 0x64616d75735f646f) { /* descend "damus_do" */
     69                     buf += 8;
     70                     w = flatcc_json_parser_symbol_part(buf, end);
     71                     if (w == 0x6e6174696f6e5f76) { /* descend "nation_v" */
     72                         buf += 8;
     73                         w = flatcc_json_parser_symbol_part(buf, end);
     74                         if ((w & 0xff00000000000000) == 0x3200000000000000) { /* "2" */
     75                             buf = flatcc_json_parser_match_symbol(ctx, (mark = buf), end, 1);
     76                             if (mark != buf) {
     77                                 int32_t val = 0;
     78                                 static flatcc_json_parser_integral_symbol_f *symbolic_parsers[] = {
     79                                         profile_local_json_parser_enum,
     80                                         profile_global_json_parser_enum, 0 };
     81                                 buf = flatcc_json_parser_int32(ctx, (mark = buf), end, &val);
     82                                 if (mark == buf) {
     83                                     buf = flatcc_json_parser_symbolic_int32(ctx, (mark = buf), end, symbolic_parsers, &val);
     84                                     if (buf == mark || buf == end) goto failed;
     85                                 }
     86                                 if (val != INT32_C(0) || (ctx->flags & flatcc_json_parser_f_force_add)) {
     87                                     if (!(pval = flatcc_builder_table_add(ctx->ctx, 10, 4, 4))) goto failed;
     88                                     flatbuffers_int32_write_to_pe(pval, val);
     89                                 }
     90                             } else {
     91                                 buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
     92                             }
     93                         } else { /* "2" */
     94                             buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
     95                         } /* "2" */
     96                     } else { /* descend "nation_v" */
     97                         if ((w & 0xffffffffffff0000) == 0x6e6174696f6e0000) { /* "nation" */
     98                             buf = flatcc_json_parser_match_symbol(ctx, (mark = buf), end, 6);
     99                             if (mark != buf) {
    100                                 int32_t val = 0;
    101                                 static flatcc_json_parser_integral_symbol_f *symbolic_parsers[] = {
    102                                         profile_local_json_parser_enum,
    103                                         profile_global_json_parser_enum, 0 };
    104                                 buf = flatcc_json_parser_int32(ctx, (mark = buf), end, &val);
    105                                 if (mark == buf) {
    106                                     buf = flatcc_json_parser_symbolic_int32(ctx, (mark = buf), end, symbolic_parsers, &val);
    107                                     if (buf == mark || buf == end) goto failed;
    108                                 }
    109                                 if (val != INT32_C(0) || (ctx->flags & flatcc_json_parser_f_force_add)) {
    110                                     if (!(pval = flatcc_builder_table_add(ctx->ctx, 9, 4, 4))) goto failed;
    111                                     flatbuffers_int32_write_to_pe(pval, val);
    112                                 }
    113                             } else {
    114                                 buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
    115                             }
    116                         } else { /* "nation" */
    117                             buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
    118                         } /* "nation" */
    119                     } /* descend "nation_v" */
    120                 } else { /* descend "damus_do" */
    121                     if (w == 0x646973706c61795f) { /* descend "display_" */
    122                         buf += 8;
    123                         w = flatcc_json_parser_symbol_part(buf, end);
    124                         if ((w & 0xffffffff00000000) == 0x6e616d6500000000) { /* "name" */
    125                             buf = flatcc_json_parser_match_symbol(ctx, (mark = buf), end, 4);
    126                             if (mark != buf) {
    127                                 buf = flatcc_json_parser_build_string(ctx, buf, end, &ref);
    128                                 if (!ref || !(pref = flatcc_builder_table_add_offset(ctx->ctx, 5))) goto failed;
    129                                 *pref = ref;
    130                             } else {
    131                                 buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
    132                             }
    133                         } else { /* "name" */
    134                             buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
    135                         } /* "name" */
    136                     } else { /* descend "display_" */
    137                         buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
    138                     } /* descend "display_" */
    139                 } /* descend "damus_do" */
    140             } /* branch "damus_do" */
    141         } else { /* branch "lud06" */
    142             if (w < 0x6e69703035000000) { /* branch "nip05" */
    143                 if (w < 0x6c75643136000000) { /* branch "lud16" */
    144                     if ((w & 0xffffffffff000000) == 0x6c75643036000000) { /* "lud06" */
    145                         buf = flatcc_json_parser_match_symbol(ctx, (mark = buf), end, 5);
    146                         if (mark != buf) {
    147                             buf = flatcc_json_parser_build_string(ctx, buf, end, &ref);
    148                             if (!ref || !(pref = flatcc_builder_table_add_offset(ctx->ctx, 11))) goto failed;
    149                             *pref = ref;
    150                         } else {
    151                             buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
    152                         }
    153                     } else { /* "lud06" */
    154                         buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
    155                     } /* "lud06" */
    156                 } else { /* branch "lud16" */
    157                     if ((w & 0xffffffff00000000) == 0x6e616d6500000000) { /* "name" */
    158                         buf = flatcc_json_parser_match_symbol(ctx, (mark = buf), end, 4);
    159                         if (mark != buf) {
    160                             buf = flatcc_json_parser_build_string(ctx, buf, end, &ref);
    161                             if (!ref || !(pref = flatcc_builder_table_add_offset(ctx->ctx, 0))) goto failed;
    162                             *pref = ref;
    163                         } else {
    164                             buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
    165                         }
    166                     } else { /* "name" */
    167                         if ((w & 0xffffffffff000000) == 0x6c75643136000000) { /* "lud16" */
    168                             buf = flatcc_json_parser_match_symbol(ctx, (mark = buf), end, 5);
    169                             if (mark != buf) {
    170                                 buf = flatcc_json_parser_build_string(ctx, buf, end, &ref);
    171                                 if (!ref || !(pref = flatcc_builder_table_add_offset(ctx->ctx, 3))) goto failed;
    172                                 *pref = ref;
    173                             } else {
    174                                 buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
    175                             }
    176                         } else { /* "lud16" */
    177                             buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
    178                         } /* "lud16" */
    179                     } /* "name" */
    180                 } /* branch "lud16" */
    181             } else { /* branch "nip05" */
    182                 if (w < 0x7069637475726500) { /* branch "picture" */
    183                     if ((w & 0xffffffffff000000) == 0x6e69703035000000) { /* "nip05" */
    184                         buf = flatcc_json_parser_match_symbol(ctx, (mark = buf), end, 5);
    185                         if (mark != buf) {
    186                             buf = flatcc_json_parser_build_string(ctx, buf, end, &ref);
    187                             if (!ref || !(pref = flatcc_builder_table_add_offset(ctx->ctx, 8))) goto failed;
    188                             *pref = ref;
    189                         } else {
    190                             buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
    191                         }
    192                     } else { /* "nip05" */
    193                         buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
    194                     } /* "nip05" */
    195                 } else { /* branch "picture" */
    196                     if (w < 0x7265616374696f6e) { /* branch "reaction" */
    197                         if ((w & 0xffffffffffffff00) == 0x7069637475726500) { /* "picture" */
    198                             buf = flatcc_json_parser_match_symbol(ctx, (mark = buf), end, 7);
    199                             if (mark != buf) {
    200                                 buf = flatcc_json_parser_build_string(ctx, buf, end, &ref);
    201                                 if (!ref || !(pref = flatcc_builder_table_add_offset(ctx->ctx, 7))) goto failed;
    202                                 *pref = ref;
    203                             } else {
    204                                 buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
    205                             }
    206                         } else { /* "picture" */
    207                             buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
    208                         } /* "picture" */
    209                     } else { /* branch "reaction" */
    210                         if (w == 0x7265616374696f6e) { /* descend "reaction" */
    211                             buf += 8;
    212                             w = flatcc_json_parser_symbol_part(buf, end);
    213                             if ((w & 0xff00000000000000) == 0x7300000000000000) { /* "s" */
    214                                 buf = flatcc_json_parser_match_symbol(ctx, (mark = buf), end, 1);
    215                                 if (mark != buf) {
    216                                     uint8_t val = 0;
    217                                     static flatcc_json_parser_integral_symbol_f *symbolic_parsers[] = {
    218                                             profile_local_json_parser_enum,
    219                                             profile_global_json_parser_enum, 0 };
    220                                     buf = flatcc_json_parser_bool(ctx, (mark = buf), end, &val);
    221                                     if (mark == buf) {
    222                                         buf = flatcc_json_parser_symbolic_bool(ctx, (mark = buf), end, symbolic_parsers, &val);
    223                                         if (buf == mark || buf == end) goto failed;
    224                                     }
    225                                     if (val != UINT8_C(1) || (ctx->flags & flatcc_json_parser_f_force_add)) {
    226                                         if (!(pval = flatcc_builder_table_add(ctx->ctx, 6, 1, 1))) goto failed;
    227                                         flatbuffers_bool_write_to_pe(pval, val);
    228                                     }
    229                                 } else {
    230                                     buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
    231                                 }
    232                             } else { /* "s" */
    233                                 buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
    234                             } /* "s" */
    235                         } else { /* descend "reaction" */
    236                             if ((w & 0xffffffffffffff00) == 0x7765627369746500) { /* "website" */
    237                                 buf = flatcc_json_parser_match_symbol(ctx, (mark = buf), end, 7);
    238                                 if (mark != buf) {
    239                                     buf = flatcc_json_parser_build_string(ctx, buf, end, &ref);
    240                                     if (!ref || !(pref = flatcc_builder_table_add_offset(ctx->ctx, 1))) goto failed;
    241                                     *pref = ref;
    242                                 } else {
    243                                     buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
    244                                 }
    245                             } else { /* "website" */
    246                                 buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
    247                             } /* "website" */
    248                         } /* descend "reaction" */
    249                     } /* branch "reaction" */
    250                 } /* branch "picture" */
    251             } /* branch "nip05" */
    252         } /* branch "lud06" */
    253         buf = flatcc_json_parser_object_end(ctx, buf, end, &more);
    254     }
    255     if (ctx->error) goto failed;
    256     if (!(*result = flatcc_builder_end_table(ctx->ctx))) goto failed;
    257     return buf;
    258 failed:
    259     return flatcc_json_parser_set_error(ctx, buf, end, flatcc_json_parser_error_runtime);
    260 }
    261 
    262 static inline int NdbProfile_parse_json_as_root(flatcc_builder_t *B, flatcc_json_parser_t *ctx, const char *buf, size_t bufsiz, int flags, const char *fid)
    263 {
    264     return flatcc_json_parser_table_as_root(B, ctx, buf, bufsiz, flags, fid, NdbProfile_parse_json_table);
    265 }
    266 
    267 static const char *NdbProfileRecord_parse_json_table(flatcc_json_parser_t *ctx, const char *buf, const char *end, flatcc_builder_ref_t *result)
    268 {
    269     int more;
    270     void *pval;
    271     flatcc_builder_ref_t ref, *pref;
    272     const char *mark;
    273     uint64_t w;
    274 
    275     *result = 0;
    276     if (flatcc_builder_start_table(ctx->ctx, 4)) goto failed;
    277     buf = flatcc_json_parser_object_start(ctx, buf, end, &more);
    278     while (more) {
    279         buf = flatcc_json_parser_symbol_start(ctx, buf, end);
    280         w = flatcc_json_parser_symbol_part(buf, end);
    281         if (w < 0x6e6f74655f6b6579) { /* branch "note_key" */
    282             if ((w & 0xffffffffff000000) == 0x6c6e75726c000000) { /* "lnurl" */
    283                 buf = flatcc_json_parser_match_symbol(ctx, (mark = buf), end, 5);
    284                 if (mark != buf) {
    285                     buf = flatcc_json_parser_build_string(ctx, buf, end, &ref);
    286                     if (!ref || !(pref = flatcc_builder_table_add_offset(ctx->ctx, 3))) goto failed;
    287                     *pref = ref;
    288                 } else {
    289                     buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
    290                 }
    291             } else { /* "lnurl" */
    292                 buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
    293             } /* "lnurl" */
    294         } else { /* branch "note_key" */
    295             if (w < 0x70726f66696c6500) { /* branch "profile" */
    296                 if (w == 0x6e6f74655f6b6579) { /* "note_key" */
    297                     buf = flatcc_json_parser_match_symbol(ctx, (mark = buf), end, 8);
    298                     if (mark != buf) {
    299                         uint64_t val = 0;
    300                         static flatcc_json_parser_integral_symbol_f *symbolic_parsers[] = {
    301                                 profile_local_json_parser_enum,
    302                                 profile_global_json_parser_enum, 0 };
    303                         buf = flatcc_json_parser_uint64(ctx, (mark = buf), end, &val);
    304                         if (mark == buf) {
    305                             buf = flatcc_json_parser_symbolic_uint64(ctx, (mark = buf), end, symbolic_parsers, &val);
    306                             if (buf == mark || buf == end) goto failed;
    307                         }
    308                         if (val != UINT64_C(0) || (ctx->flags & flatcc_json_parser_f_force_add)) {
    309                             if (!(pval = flatcc_builder_table_add(ctx->ctx, 2, 8, 8))) goto failed;
    310                             flatbuffers_uint64_write_to_pe(pval, val);
    311                         }
    312                     } else {
    313                         buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
    314                     }
    315                 } else { /* "note_key" */
    316                     buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
    317                 } /* "note_key" */
    318             } else { /* branch "profile" */
    319                 if ((w & 0xffffffffffffff00) == 0x70726f66696c6500) { /* "profile" */
    320                     buf = flatcc_json_parser_match_symbol(ctx, (mark = buf), end, 7);
    321                     if (mark != buf) {
    322                         buf = NdbProfile_parse_json_table(ctx, buf, end, &ref);
    323                         if (!ref || !(pref = flatcc_builder_table_add_offset(ctx->ctx, 0))) goto failed;
    324                         *pref = ref;
    325                     } else {
    326                         goto pfguard1;
    327                     }
    328                 } else { /* "profile" */
    329                     goto pfguard1;
    330                 } /* "profile" */
    331                 goto endpfguard1;
    332 pfguard1:
    333                 if (w == 0x7265636569766564) { /* descend "received" */
    334                     buf += 8;
    335                     w = flatcc_json_parser_symbol_part(buf, end);
    336                     if ((w & 0xffffff0000000000) == 0x5f61740000000000) { /* "_at" */
    337                         buf = flatcc_json_parser_match_symbol(ctx, (mark = buf), end, 3);
    338                         if (mark != buf) {
    339                             uint64_t val = 0;
    340                             static flatcc_json_parser_integral_symbol_f *symbolic_parsers[] = {
    341                                     profile_local_json_parser_enum,
    342                                     profile_global_json_parser_enum, 0 };
    343                             buf = flatcc_json_parser_uint64(ctx, (mark = buf), end, &val);
    344                             if (mark == buf) {
    345                                 buf = flatcc_json_parser_symbolic_uint64(ctx, (mark = buf), end, symbolic_parsers, &val);
    346                                 if (buf == mark || buf == end) goto failed;
    347                             }
    348                             if (val != UINT64_C(0) || (ctx->flags & flatcc_json_parser_f_force_add)) {
    349                                 if (!(pval = flatcc_builder_table_add(ctx->ctx, 1, 8, 8))) goto failed;
    350                                 flatbuffers_uint64_write_to_pe(pval, val);
    351                             }
    352                         } else {
    353                             buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
    354                         }
    355                     } else { /* "_at" */
    356                         buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
    357                     } /* "_at" */
    358                 } else { /* descend "received" */
    359                     buf = flatcc_json_parser_unmatched_symbol(ctx, buf, end);
    360                 } /* descend "received" */
    361 endpfguard1:
    362                 (void)0;
    363             } /* branch "profile" */
    364         } /* branch "note_key" */
    365         buf = flatcc_json_parser_object_end(ctx, buf, end, &more);
    366     }
    367     if (ctx->error) goto failed;
    368     if (!(*result = flatcc_builder_end_table(ctx->ctx))) goto failed;
    369     return buf;
    370 failed:
    371     return flatcc_json_parser_set_error(ctx, buf, end, flatcc_json_parser_error_runtime);
    372 }
    373 
    374 static inline int NdbProfileRecord_parse_json_as_root(flatcc_builder_t *B, flatcc_json_parser_t *ctx, const char *buf, size_t bufsiz, int flags, const char *fid)
    375 {
    376     return flatcc_json_parser_table_as_root(B, ctx, buf, bufsiz, flags, fid, NdbProfileRecord_parse_json_table);
    377 }
    378 
    379 static const char *profile_local_json_parser_enum(flatcc_json_parser_t *ctx, const char *buf, const char *end,
    380         int *value_type, uint64_t *value, int *aggregate)
    381 {
    382     /* Scope has no enum / union types to look up. */
    383     return buf; /* unmatched; */
    384 }
    385 
    386 static const char *profile_global_json_parser_enum(flatcc_json_parser_t *ctx, const char *buf, const char *end,
    387         int *value_type, uint64_t *value, int *aggregate)
    388 {
    389     /* Global scope has no enum / union types to look up. */
    390     return buf; /* unmatched; */
    391 }
    392 
    393 static int profile_parse_json(flatcc_builder_t *B, flatcc_json_parser_t *ctx,
    394         const char *buf, size_t bufsiz, int flags)
    395 {
    396     flatcc_json_parser_t parser;
    397     flatcc_builder_ref_t root;
    398 
    399     ctx = ctx ? ctx : &parser;
    400     flatcc_json_parser_init(ctx, B, buf, buf + bufsiz, flags);
    401     if (flatcc_builder_start_buffer(B, 0, 0, 0)) return -1;
    402     NdbProfileRecord_parse_json_table(ctx, buf, buf + bufsiz, &root);
    403     if (ctx->error) {
    404         return ctx->error;
    405     }
    406     if (!flatcc_builder_end_buffer(B, root)) return -1;
    407     ctx->end_loc = buf;
    408     return 0;
    409 }
    410 
    411 #include "flatcc/flatcc_epilogue.h"
    412 #endif /* PROFILE_JSON_PARSER_H */