LCOV - code coverage report
Current view: top level - io/source/json - json_element_reader.c (source / functions) Coverage Total Hit
Test: crystal-facet-uml_v1.63.2_covts Lines: 87.0 % 575 500
Test Date: 2025-05-01 10:10:14 Functions: 95.2 % 21 20

            Line data    Source code
       1              : /* File: json_element_reader.c; Copyright and License: see below */
       2              : 
       3              : #include "json/json_element_reader.h"
       4              : #include "u8/u8_trace.h"
       5              : #include "u8/u8_log.h"
       6              : #include <assert.h>
       7              : 
       8           21 : void json_element_reader_init ( json_element_reader_t *this_, universal_input_stream_t *in_data )
       9              : {
      10           21 :     U8_TRACE_BEGIN();
      11           21 :     assert( NULL != in_data );
      12              : 
      13           21 :     (*this_).temp_string = utf8stringbuf_new( (*this_).temp_string_buffer, sizeof((*this_).temp_string_buffer) );
      14              : 
      15           21 :     json_token_reader_init( &((*this_).tokenizer), in_data );
      16              : 
      17           21 :     (*this_).top_array_after_first_entry = false;
      18           21 :     (*this_).sub_array_after_first_entry = false;
      19              : 
      20           21 :     U8_TRACE_END();
      21           21 : }
      22              : 
      23            0 : void json_element_reader_reinit ( json_element_reader_t *this_, universal_input_stream_t *in_data )
      24              : {
      25            0 :     U8_TRACE_BEGIN();
      26            0 :     assert( NULL != in_data );
      27              : 
      28            0 :     json_element_reader_destroy( this_ );
      29            0 :     json_element_reader_init( this_, in_data );
      30              : 
      31            0 :     U8_TRACE_END();
      32            0 : }
      33              : 
      34           21 : void json_element_reader_destroy ( json_element_reader_t *this_ )
      35              : {
      36           21 :     U8_TRACE_BEGIN();
      37              : 
      38           21 :     json_token_reader_destroy( &((*this_).tokenizer) );
      39              : 
      40           21 :     U8_TRACE_END();
      41           21 : }
      42              : 
      43           21 : u8_error_t json_element_reader_expect_header ( json_element_reader_t *this_ )
      44              : {
      45           21 :     U8_TRACE_BEGIN();
      46           21 :     u8_error_t result = U8_ERROR_NONE;
      47           21 :     char member_name_buf[24] = "";
      48           21 :     utf8stringbuf_t member_name = UTF8STRINGBUF( member_name_buf );
      49              : 
      50           21 :     result = json_token_reader_expect_begin_object ( &((*this_).tokenizer) );
      51              : 
      52           21 :     if ( U8_ERROR_NONE == result )
      53              :     {
      54           20 :         result = json_token_reader_read_member_name ( &((*this_).tokenizer), member_name );
      55           20 :         if ( ! utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_HEAD ) )
      56              :         {
      57            0 :             U8_LOG_ERROR_INT( "unexpected object contents at line",
      58              :                              json_token_reader_get_input_line( &((*this_).tokenizer) )
      59              :                            );
      60            0 :             result |= U8_ERROR_PARSER_STRUCTURE;
      61              :         }
      62              :     }
      63              : 
      64           21 :     if ( U8_ERROR_NONE == result )
      65              :     {
      66           20 :         result = json_token_reader_expect_name_separator( &((*this_).tokenizer) );
      67              :     }
      68              : 
      69           21 :     if ( U8_ERROR_NONE == result )
      70              :     {
      71           20 :         result = json_element_reader_skip_next_object( this_ );
      72              :     }
      73              : 
      74           21 :     U8_TRACE_END_ERR( result );
      75           21 :     return result;
      76              : }
      77              : 
      78           55 : u8_error_t json_element_reader_expect_begin_top_array ( json_element_reader_t *this_ )
      79              : {
      80           55 :     U8_TRACE_BEGIN();
      81           55 :     u8_error_t result = U8_ERROR_NONE;
      82           55 :     char member_name_buf[24] = "";
      83           55 :     utf8stringbuf_t member_name = UTF8STRINGBUF( member_name_buf );
      84              : 
      85           55 :     result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
      86              : 
      87           55 :     if ( U8_ERROR_NONE == result )
      88              :     {
      89           55 :         result = json_token_reader_read_member_name ( &((*this_).tokenizer), member_name );
      90           55 :         if (( ! utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_VIEWS ) )
      91           35 :             && ( ! utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_NODES ) )
      92           17 :             && ( ! utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_EDGES ) ))
      93              :         {
      94            0 :             U8_LOG_ERROR_INT( "unexpected object contents at line",
      95              :                              json_token_reader_get_input_line( &((*this_).tokenizer) )
      96              :                            );
      97            0 :             result |= U8_ERROR_PARSER_STRUCTURE;
      98              :         }
      99              :     }
     100              : 
     101           55 :     if ( U8_ERROR_NONE == result )
     102              :     {
     103           55 :         result = json_token_reader_expect_name_separator( &((*this_).tokenizer) );
     104              :     }
     105              : 
     106           55 :     if ( U8_ERROR_NONE == result )
     107              :     {
     108           55 :         result = json_token_reader_expect_begin_array( &((*this_).tokenizer) );
     109              :     }
     110              : 
     111           55 :     U8_TRACE_END_ERR( result );
     112           55 :     return result;
     113              : }
     114              : 
     115           14 : u8_error_t json_element_reader_expect_footer ( json_element_reader_t *this_ )
     116              : {
     117           14 :     U8_TRACE_BEGIN();
     118           14 :     u8_error_t result = U8_ERROR_NONE;
     119              : 
     120              :     bool end_ok;
     121           14 :     result = json_token_reader_check_end_object ( &((*this_).tokenizer), &end_ok );
     122           14 :     if ( ! end_ok )
     123              :     {
     124            0 :         U8_LOG_ERROR_INT( "unexpected object contents at line",
     125              :                             json_token_reader_get_input_line( &((*this_).tokenizer) )
     126              :                         );
     127            0 :         result |= U8_ERROR_PARSER_STRUCTURE;
     128              :     }
     129              : 
     130           14 :     if ( U8_ERROR_NONE == result )
     131              :     {
     132           14 :         result = json_token_reader_expect_eof ( &((*this_).tokenizer) );
     133              :     }
     134              : 
     135           14 :     U8_TRACE_END_ERR( result );
     136           14 :     return result;
     137              : }
     138              : 
     139           86 : u8_error_t json_element_reader_check_end_top_array ( json_element_reader_t *this_, bool* out_end )
     140              : {
     141           86 :     U8_TRACE_BEGIN();
     142           86 :     assert( NULL != out_end );
     143           86 :     u8_error_t result = U8_ERROR_NONE;
     144              : 
     145           86 :     result = json_token_reader_check_end_array ( &((*this_).tokenizer), out_end );
     146              : 
     147           86 :     if (( U8_ERROR_NONE == result ) && ( *out_end ))
     148              :     {
     149           49 :         (*this_).top_array_after_first_entry = false;
     150              :     }
     151              : 
     152           86 :     U8_TRACE_END_ERR( result );
     153           86 :     return result;
     154              : }
     155              : 
     156           20 : u8_error_t json_element_reader_expect_begin_sub_array ( json_element_reader_t *this_ )
     157              : {
     158           20 :     U8_TRACE_BEGIN();
     159           20 :     u8_error_t result = U8_ERROR_NONE;
     160              : 
     161           20 :     result = json_token_reader_expect_begin_array( &((*this_).tokenizer) );
     162           20 :     if ( U8_ERROR_NONE == result )
     163              :     {
     164           20 :         (*this_).sub_array_after_first_entry = false;
     165              :     }
     166              : 
     167           20 :     U8_TRACE_END_ERR( result );
     168           20 :     return result;
     169              : }
     170              : 
     171           49 : u8_error_t json_element_reader_check_end_sub_array ( json_element_reader_t *this_, bool* out_end )
     172              : {
     173           49 :     U8_TRACE_BEGIN();
     174           49 :     assert( NULL != out_end );
     175           49 :     u8_error_t result = U8_ERROR_NONE;
     176              : 
     177           49 :     result = json_token_reader_check_end_array ( &((*this_).tokenizer), out_end );
     178              : 
     179           49 :     if ( U8_ERROR_NONE == result )
     180              :     {
     181           49 :         if ( *out_end )
     182              :         {
     183           20 :             (*this_).sub_array_after_first_entry = false;
     184              :         }
     185              :         else
     186              :         {
     187           29 :             if ( (*this_).sub_array_after_first_entry )
     188              :             {
     189           11 :                 result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
     190              :             }
     191              :             else
     192              :             {
     193           18 :                 (*this_).sub_array_after_first_entry = true;
     194              :             }
     195              :         }
     196              :     }
     197              : 
     198           49 :     U8_TRACE_END_ERR( result );
     199           49 :     return result;
     200              : }
     201              : 
     202           37 : u8_error_t json_element_reader_expect_begin_type_of_element ( json_element_reader_t *this_, data_table_t *out_type )
     203              : {
     204           37 :     U8_TRACE_BEGIN();
     205           37 :     assert ( NULL != out_type );
     206           37 :     u8_error_t result = U8_ERROR_NONE;
     207              : 
     208              :     bool array_end;
     209              :     char member_name_buf[24];
     210           37 :     utf8stringbuf_t member_name = UTF8STRINGBUF( member_name_buf );
     211              : 
     212           37 :     result = json_token_reader_check_end_array ( &((*this_).tokenizer), &array_end );
     213              : 
     214           37 :     if ( U8_ERROR_NONE == result )
     215              :     {
     216           37 :         if ( array_end )
     217              :         {
     218            0 :             (*out_type) = DATA_TABLE_VOID;
     219              :         }
     220              :         else
     221              :         {
     222           37 :             if ( (*this_).top_array_after_first_entry )
     223              :             {
     224            1 :                 result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
     225              :             }
     226              :             else
     227              :             {
     228           36 :                 (*this_).top_array_after_first_entry = true;
     229              :             }
     230           37 :             if ( U8_ERROR_NONE == result )
     231              :             {
     232           37 :                 result = json_token_reader_expect_begin_object ( &((*this_).tokenizer) );
     233              :             }
     234           37 :             if ( U8_ERROR_NONE == result )
     235              :             {
     236           37 :                 result = json_token_reader_read_member_name ( &((*this_).tokenizer), member_name );
     237              :             }
     238           37 :             if ( U8_ERROR_NONE == result )
     239              :             {
     240           37 :                 if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM ) )
     241              :                 {
     242            9 :                     (*out_type) = DATA_TABLE_DIAGRAM;
     243              :                 }
     244              :                 /*
     245              :                 else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT ) )
     246              :                 {
     247              :                     (*out_type) = DATA_TABLE_DIAGRAMELEMENT;
     248              :                 }
     249              :                 */
     250           28 :                 else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_CLASSIFIER ) )
     251              :                 {
     252           14 :                     (*out_type) = DATA_TABLE_CLASSIFIER;
     253              :                 }
     254              :                 /*
     255              :                 else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_FEATURE ) )
     256              :                 {
     257              :                     (*out_type) = DATA_TABLE_FEATURE;
     258              :                 }
     259              :                 */
     260           14 :                 else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP ) )
     261              :                 {
     262           13 :                     (*out_type) = DATA_TABLE_RELATIONSHIP;
     263              :                 }
     264              :                 else
     265              :                 {
     266            1 :                     U8_LOG_ERROR_INT( "unexpected token at line",
     267              :                                      json_token_reader_get_input_line( &((*this_).tokenizer) )
     268              :                                    );
     269            1 :                     result = U8_ERROR_PARSER_STRUCTURE;
     270              :                 }
     271              :             }
     272           37 :             if ( U8_ERROR_NONE == result )
     273              :             {
     274           36 :                 result = json_token_reader_expect_name_separator ( &((*this_).tokenizer) );
     275              :             }
     276              :         }
     277              :     }
     278              : 
     279           37 :     U8_TRACE_END_ERR( result );
     280           37 :     return result;
     281              : }
     282              : 
     283           31 : u8_error_t json_element_reader_expect_end_type_of_element ( json_element_reader_t *this_ )
     284              : {
     285           31 :     U8_TRACE_BEGIN();
     286           31 :     u8_error_t result = U8_ERROR_NONE;
     287              :     bool condition;
     288              : 
     289           31 :     result = json_token_reader_check_end_object ( &((*this_).tokenizer), &condition );
     290           31 :     if ( ! condition )
     291              :     {
     292            0 :         U8_LOG_ERROR_INT( "unexpected object contents at line",
     293              :                          json_token_reader_get_input_line( &((*this_).tokenizer) )
     294              :                        );
     295            0 :         result |= U8_ERROR_PARSER_STRUCTURE;
     296              :     }
     297              : 
     298           31 :     U8_TRACE_END_ERR( result );
     299           31 :     return result;
     300              : }
     301              : 
     302           14 : u8_error_t json_element_reader_get_next_classifier ( json_element_reader_t *this_,
     303              :                                                      data_classifier_t *out_object,
     304              :                                                      bool* out_has_features_array )
     305              : {
     306           14 :     U8_TRACE_BEGIN();
     307           14 :     assert ( NULL != out_object );
     308           14 :     assert ( NULL != out_has_features_array );
     309           14 :     u8_error_t result = U8_ERROR_NONE;
     310              : 
     311              :     char member_name_buf[24];
     312           14 :     utf8stringbuf_t member_name = UTF8STRINGBUF( member_name_buf );
     313              : 
     314           14 :     data_classifier_init_empty( out_object );
     315              : 
     316              :     /* header */
     317              : 
     318           14 :     result = json_token_reader_expect_begin_object ( &((*this_).tokenizer) );
     319              : 
     320              :     /* members */
     321              : 
     322           14 :     bool first_member_passed = false;
     323           14 :     bool object_end = false;
     324           14 :     bool break_at_features = false;
     325          156 :     while (( ! object_end )&&( ! break_at_features )&&( U8_ERROR_NONE == result ))
     326              :     {
     327          142 :         result = json_token_reader_check_end_object ( &((*this_).tokenizer), &object_end );
     328          142 :         if ( U8_ERROR_NONE == result )
     329              :         {
     330          142 :             if ( ! object_end )
     331              :             {
     332          142 :                 if ( first_member_passed )
     333              :                 {
     334          128 :                     result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
     335              :                 }
     336              :                 else
     337              :                 {
     338           14 :                     first_member_passed = true;
     339              :                 }
     340          142 :                 if ( U8_ERROR_NONE == result )
     341              :                 {
     342          142 :                     result = json_token_reader_read_member_name ( &((*this_).tokenizer), member_name );
     343              :                 }
     344          142 :                 if ( U8_ERROR_NONE == result )
     345              :                 {
     346          142 :                     result = json_token_reader_expect_name_separator ( &((*this_).tokenizer) );
     347              :                 }
     348          142 :                 if ( U8_ERROR_NONE == result )
     349              :                 {
     350          142 :                     if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_CLASSIFIER_ID ) )
     351              :                     {
     352              :                         int64_t parsed_integer;
     353           14 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
     354           14 :                         data_classifier_set_row_id ( out_object, parsed_integer );
     355              :                     }
     356          128 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_CLASSIFIER_MAIN_TYPE ) )
     357              :                     {
     358              :                         int64_t parsed_integer;
     359           14 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
     360           14 :                         data_classifier_set_main_type ( out_object, parsed_integer );
     361              :                     }
     362          114 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_CLASSIFIER_MAIN_TYPE_NAME ) )
     363              :                     {
     364            7 :                         result = json_element_reader_skip_next_string( this_ );
     365              :                     }
     366          107 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_CLASSIFIER_X_ORDER ) )
     367              :                     {
     368              :                         int64_t parsed_integer;
     369           14 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
     370           14 :                         data_classifier_set_x_order ( out_object, parsed_integer );
     371              :                     }
     372           93 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_CLASSIFIER_Y_ORDER ) )
     373              :                     {
     374              :                         int64_t parsed_integer;
     375           14 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
     376           14 :                         data_classifier_set_y_order ( out_object, parsed_integer );
     377              :                     }
     378           79 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_CLASSIFIER_LIST_ORDER ) )
     379              :                     {
     380              :                         int64_t parsed_integer;
     381           14 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
     382           14 :                         data_classifier_set_list_order ( out_object, parsed_integer );
     383              :                     }
     384           65 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_CLASSIFIER_STEREOTYPE ) )
     385              :                     {
     386           14 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
     387           14 :                         data_classifier_set_stereotype( out_object,
     388           14 :                                                         utf8stringbuf_get_string( &((*this_).temp_string) )
     389              :                                                       );
     390              :                     }
     391           51 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_CLASSIFIER_NAME ) )
     392              :                     {
     393           14 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
     394           14 :                         data_classifier_set_name( out_object,
     395           14 :                                                   utf8stringbuf_get_string( &((*this_).temp_string) )
     396              :                                                 );
     397              :                     }
     398           37 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_CLASSIFIER_DESCRIPTION ) )
     399              :                     {
     400           14 :                         result = json_element_reader_private_read_string_array( this_, (*this_).temp_string );
     401           14 :                         data_classifier_set_description( out_object,
     402           14 :                                                          utf8stringbuf_get_string( &((*this_).temp_string) )
     403              :                                                        );
     404              :                     }
     405           23 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_UUID ) )
     406              :                     {
     407            9 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
     408            9 :                         result |= data_classifier_set_uuid( out_object,
     409            9 :                                                             utf8stringbuf_get_string( &((*this_).temp_string) )
     410              :                                                           );
     411              :                     }
     412           14 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_CLASSIFIER_FEATURES ) )
     413              :                     {
     414           14 :                         break_at_features = true;  /* end the loop */
     415              :                     }
     416              :                     else
     417              :                     {
     418            0 :                         U8_LOG_ERROR_INT( "unexpected member name at line",
     419              :                                          json_token_reader_get_input_line( &((*this_).tokenizer) )
     420              :                                        );
     421            0 :                         result = U8_ERROR_PARSER_STRUCTURE;
     422              :                     }
     423              :                 }
     424              :             }
     425              :         }
     426              :         else
     427              :         {
     428            0 :             U8_LOG_ERROR_INT( "unexpected character at line",
     429              :                              json_token_reader_get_input_line( &((*this_).tokenizer) )
     430              :                            );
     431            0 :             result = U8_ERROR_PARSER_STRUCTURE;
     432            0 :             object_end = true;
     433              :         }
     434              :     }
     435              : 
     436              :     /* footer */
     437              : 
     438           14 :     if ( U8_ERROR_NONE == result )
     439              :     {
     440           14 :         data_classifier_trace( out_object );
     441              :     }
     442              : 
     443           14 :     *out_has_features_array = break_at_features;
     444           14 :     U8_TRACE_END_ERR( result );
     445           14 :     return result;
     446              : }
     447              : 
     448           20 : u8_error_t json_element_reader_end_unfinished_object ( json_element_reader_t *this_ )
     449              : {
     450           20 :     U8_TRACE_BEGIN();
     451           20 :     u8_error_t result = U8_ERROR_NONE;
     452              : 
     453           20 :     bool object_end = false;
     454           20 :     result = json_token_reader_check_end_object ( &((*this_).tokenizer), &object_end );
     455           20 :     if ( U8_ERROR_NONE == result )
     456              :     {
     457           20 :         if (! object_end)
     458              :         {
     459            0 :             result = U8_ERROR_PARSER_STRUCTURE;
     460              :         }
     461              :     }
     462              : 
     463           20 :     U8_TRACE_END_ERR( result );
     464           20 :     return result;
     465              : }
     466              : 
     467            9 : u8_error_t json_element_reader_get_next_diagram ( json_element_reader_t *this_,
     468              :                                                   data_diagram_t *out_object,
     469              :                                                   utf8stringbuf_t out_parent_uuid,
     470              :                                                   bool* out_has_diagramelements_array )
     471              : {
     472            9 :     U8_TRACE_BEGIN();
     473            9 :     assert ( NULL != out_object );
     474            9 :     assert ( NULL != out_has_diagramelements_array );
     475            9 :     u8_error_t result = U8_ERROR_NONE;
     476              : 
     477              :     char member_name_buf[24];
     478            9 :     utf8stringbuf_t member_name = UTF8STRINGBUF( member_name_buf );
     479              : 
     480            9 :     data_diagram_init_empty( out_object );
     481            9 :     utf8stringbuf_clear( &out_parent_uuid );
     482              : 
     483              :     /* header */
     484              : 
     485            9 :     result = json_token_reader_expect_begin_object ( &((*this_).tokenizer) );
     486              : 
     487              :     /* members */
     488              : 
     489            9 :     bool first_member_passed = false;
     490            9 :     bool object_end = false;
     491            9 :     bool break_at_subelements = false;
     492           92 :     while (( ! object_end )&&( ! break_at_subelements )&&( U8_ERROR_NONE == result ))
     493              :     {
     494           83 :         result = json_token_reader_check_end_object ( &((*this_).tokenizer), &object_end );
     495           83 :         if ( U8_ERROR_NONE == result )
     496              :         {
     497           83 :             if ( ! object_end )
     498              :             {
     499           82 :                 if ( first_member_passed )
     500              :                 {
     501           74 :                     result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
     502              :                 }
     503              :                 else
     504              :                 {
     505            8 :                     first_member_passed = true;
     506              :                 }
     507           82 :                 if ( U8_ERROR_NONE == result )
     508              :                 {
     509           82 :                     result = json_token_reader_read_member_name ( &((*this_).tokenizer), member_name );
     510              :                 }
     511           82 :                 if ( U8_ERROR_NONE == result )
     512              :                 {
     513           82 :                     result = json_token_reader_expect_name_separator ( &((*this_).tokenizer) );
     514              :                 }
     515           82 :                 if ( U8_ERROR_NONE == result )
     516              :                 {
     517           82 :                     if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM_ID ) )
     518              :                     {
     519              :                         int64_t parsed_integer;
     520            8 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
     521            8 :                         data_diagram_set_row_id ( out_object, parsed_integer );
     522              :                     }
     523           74 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM_PARENT_ID ) )
     524              :                     {
     525              :                         int64_t ignored_integer;
     526            0 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &ignored_integer );
     527              :                         (void) ignored_integer;
     528              :                     }
     529           74 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM_PARENT_NAME ) )
     530              :                     {
     531            7 :                         result = json_element_reader_skip_next_string( this_ );
     532              :                     }
     533           67 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM_DIAGRAM_TYPE ) )
     534              :                     {
     535              :                         int64_t parsed_integer;
     536            8 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
     537            8 :                         data_diagram_set_diagram_type ( out_object, parsed_integer );
     538              :                     }
     539           59 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM_DIAGRAM_TYPE_NAME ) )
     540              :                     {
     541            7 :                         result = json_element_reader_skip_next_string( this_ );
     542              :                     }
     543           52 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM_LIST_ORDER ) )
     544              :                     {
     545              :                         int64_t parsed_integer;
     546            8 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
     547            8 :                         data_diagram_set_list_order ( out_object, parsed_integer );
     548              :                     }
     549           44 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM_DESCRIPTION ) )
     550              :                     {
     551            8 :                         result = json_element_reader_private_read_string_array( this_, (*this_).temp_string );
     552            8 :                         data_diagram_set_description( out_object,
     553            8 :                                                       utf8stringbuf_get_string( &((*this_).temp_string) )
     554              :                                                     );
     555              :                     }
     556           36 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM_NAME ) )
     557              :                     {
     558            8 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
     559            8 :                         result |= data_diagram_set_name( out_object,
     560            8 :                                                          utf8stringbuf_get_string( &((*this_).temp_string) )
     561              :                                                        );
     562              :                     }
     563           28 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM_STEREOTYPE ) )
     564              :                     {
     565              :                         /* new in 1.43.0: stereotype; imported since 1.47.0 */
     566            0 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
     567            0 :                         result |= data_diagram_set_stereotype( out_object,
     568            0 :                                                                utf8stringbuf_get_string( &((*this_).temp_string) )
     569              :                                                              );
     570              :                     }
     571           28 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM_DISPLAY_FLAGS ) )
     572              :                     {
     573              :                         int64_t parsed_integer;
     574            7 :                         result = json_token_reader_read_int_value( &((*this_).tokenizer), &parsed_integer );
     575            7 :                         data_diagram_set_display_flags ( out_object, parsed_integer );
     576              :                     }
     577           21 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM_DISPLAY_FLAG_NAMES ) )
     578              :                     {
     579            7 :                         result = json_element_reader_skip_next_string( this_ );
     580              :                     }
     581           14 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM_PARENT ) )
     582              :                     {
     583            0 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), out_parent_uuid );
     584              :                     }
     585           14 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_UUID ) )
     586              :                     {
     587            7 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
     588            7 :                         result |= data_diagram_set_uuid( out_object,
     589            7 :                                                          utf8stringbuf_get_string( &((*this_).temp_string) )
     590              :                                                        );
     591              :                     }
     592            7 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAM_ELEMENTS ) )
     593              :                     {
     594            7 :                         break_at_subelements = true;  /* end the loop */
     595              :                     }
     596              :                     else
     597              :                     {
     598            0 :                         U8_LOG_ERROR_INT( "unexpected member name at line",
     599              :                                          json_token_reader_get_input_line( &((*this_).tokenizer) )
     600              :                                        );
     601            0 :                         result = U8_ERROR_PARSER_STRUCTURE;
     602              :                     }
     603              :                 }
     604              :             }
     605              :         }
     606              :         else
     607              :         {
     608            0 :             U8_LOG_ERROR_INT( "unexpected character at line",
     609              :                              json_token_reader_get_input_line( &((*this_).tokenizer) )
     610              :                            );
     611            0 :             result = U8_ERROR_PARSER_STRUCTURE;
     612            0 :             object_end = true;
     613              :         }
     614              :     }
     615              : 
     616              :     /* footer */
     617              : 
     618            9 :     if ( U8_ERROR_NONE == result )
     619              :     {
     620            8 :         data_diagram_trace( out_object );
     621              :     }
     622              : 
     623            9 :     *out_has_diagramelements_array = break_at_subelements;
     624            9 :     U8_TRACE_END_ERR( result );
     625            9 :     return result;
     626              : }
     627              : 
     628           13 : u8_error_t json_element_reader_get_next_relationship ( json_element_reader_t *this_,
     629              :                                                        data_relationship_t *out_object,
     630              :                                                        utf8stringbuf_t out_from_node_uuid,
     631              :                                                        utf8stringbuf_t out_to_node_uuid
     632              :                                                      )
     633              : {
     634           13 :     U8_TRACE_BEGIN();
     635           13 :     assert( NULL != out_object );
     636           13 :     u8_error_t result = U8_ERROR_NONE;
     637              : 
     638              :     char member_name_buf[24];
     639           13 :     utf8stringbuf_t member_name = UTF8STRINGBUF( member_name_buf );
     640              : 
     641           13 :     data_relationship_init_empty( out_object );
     642           13 :     utf8stringbuf_clear( &out_from_node_uuid );
     643           13 :     utf8stringbuf_clear( &out_to_node_uuid );
     644              : 
     645              :     /* header */
     646              : 
     647           13 :     result = json_token_reader_expect_begin_object ( &((*this_).tokenizer) );
     648              : 
     649              :     /* members */
     650              : 
     651           13 :     bool first_member_passed = false;
     652           13 :     bool object_end = false;
     653          236 :     while (( ! object_end )&&( U8_ERROR_NONE == result ))
     654              :     {
     655          223 :         result = json_token_reader_check_end_object ( &((*this_).tokenizer), &object_end );
     656          223 :         if ( U8_ERROR_NONE == result )
     657              :         {
     658          223 :             if ( ! object_end )
     659              :             {
     660          210 :                 if ( first_member_passed )
     661              :                 {
     662          197 :                     result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
     663              :                 }
     664              :                 else
     665              :                 {
     666           13 :                     first_member_passed = true;
     667              :                 }
     668          210 :                 if ( U8_ERROR_NONE == result )
     669              :                 {
     670          210 :                     result = json_token_reader_read_member_name ( &((*this_).tokenizer), member_name );
     671              :                 }
     672          210 :                 if ( U8_ERROR_NONE == result )
     673              :                 {
     674          210 :                     result = json_token_reader_expect_name_separator ( &((*this_).tokenizer) );
     675              :                 }
     676          210 :                 if ( U8_ERROR_NONE == result )
     677              :                 {
     678          210 :                     if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_ID ) )
     679              :                     {
     680              :                         int64_t parsed_integer;
     681           13 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
     682           13 :                         data_relationship_set_row_id ( out_object, parsed_integer );
     683              :                     }
     684          197 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_MAIN_TYPE ) )
     685              :                     {
     686              :                         int64_t parsed_integer;
     687           13 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
     688           13 :                         data_relationship_set_main_type ( out_object, parsed_integer );
     689              :                     }
     690          184 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_MAIN_TYPE_NAME ) )
     691              :                     {
     692            7 :                         result = json_element_reader_skip_next_string( this_ );
     693              :                     }
     694          177 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_STEREOTYPE ) )
     695              :                     {
     696              :                         /* new in 1.43.0: stereotype; imported since 1.47.0 */
     697            0 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
     698            0 :                         data_relationship_set_stereotype( out_object,
     699            0 :                                                           utf8stringbuf_get_string( &((*this_).temp_string) )
     700              :                                                         );
     701              :                     }
     702          177 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_LIST_ORDER ) )
     703              :                     {
     704              :                         int64_t parsed_integer;
     705           13 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
     706           13 :                         data_relationship_set_list_order ( out_object, parsed_integer );
     707              :                     }
     708          164 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_DESCRIPTION ) )
     709              :                     {
     710           13 :                         result = json_element_reader_private_read_string_array( this_, (*this_).temp_string );
     711           13 :                         data_relationship_set_description( out_object,
     712           13 :                                                            utf8stringbuf_get_string( &((*this_).temp_string) )
     713              :                                                          );
     714              :                     }
     715          151 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_NAME ) )
     716              :                     {
     717           13 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
     718           13 :                         data_relationship_set_name( out_object,
     719           13 :                                                     utf8stringbuf_get_string( &((*this_).temp_string) )
     720              :                                                   );
     721              :                     }
     722          138 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_FROM_CLASSIFIER_ID ) )
     723              :                     {
     724              :                         int64_t parsed_integer;
     725           13 :                         result = json_token_reader_read_int_value( &((*this_).tokenizer), &parsed_integer );
     726           13 :                         data_relationship_set_from_classifier_row_id ( out_object, parsed_integer );
     727              :                     }
     728          125 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_FROM_CLASSIFIER_NAME ) )
     729              :                     {
     730           13 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
     731           13 :                         U8_TRACE_INFO_STR( "from-classifier name:", utf8stringbuf_get_string( &((*this_).temp_string) ) );
     732              :                     }
     733          112 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_FROM_FEATURE_ID ) )
     734              :                     {
     735              :                         int64_t parsed_integer;
     736           13 :                         result = json_token_reader_read_int_value( &((*this_).tokenizer), &parsed_integer );
     737           13 :                         data_relationship_set_from_feature_row_id ( out_object, parsed_integer );
     738              :                     }
     739           99 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_FROM_FEATURE_KEY ) )
     740              :                     {
     741           13 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
     742           13 :                         U8_TRACE_INFO_STR( "from-feature key:", utf8stringbuf_get_string( &((*this_).temp_string) ) );
     743              :                     }
     744           86 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_TO_CLASSIFIER_ID ) )
     745              :                     {
     746              :                         int64_t parsed_integer;
     747           13 :                         result = json_token_reader_read_int_value( &((*this_).tokenizer), &parsed_integer );
     748           13 :                         data_relationship_set_to_classifier_row_id ( out_object, parsed_integer );
     749              :                     }
     750           73 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_TO_CLASSIFIER_NAME ) )
     751              :                     {
     752           13 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
     753           13 :                         U8_TRACE_INFO_STR( "to-classifier name:", utf8stringbuf_get_string( &((*this_).temp_string) ) );
     754              :                     }
     755           60 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_TO_FEATURE_ID ) )
     756              :                     {
     757              :                         int64_t parsed_integer;
     758           13 :                         result = json_token_reader_read_int_value( &((*this_).tokenizer), &parsed_integer );
     759           13 :                         data_relationship_set_to_feature_row_id ( out_object, parsed_integer );
     760              :                     }
     761           47 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_TO_FEATURE_KEY ) )
     762              :                     {
     763              : 
     764           13 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
     765           13 :                         U8_TRACE_INFO_STR( "to-feature key:", utf8stringbuf_get_string( &((*this_).temp_string) ) );
     766              :                     }
     767           34 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_FROM_NODE ) )
     768              :                     {
     769           13 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), out_from_node_uuid );
     770              :                     }
     771           21 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_RELATIONSHIP_TO_NODE ) )
     772              :                     {
     773           13 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), out_to_node_uuid );
     774              :                     }
     775            8 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_UUID ) )
     776              :                     {
     777            8 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
     778            8 :                         result |= data_relationship_set_uuid( out_object,
     779            8 :                                                               utf8stringbuf_get_string( &((*this_).temp_string) )
     780              :                                                             );
     781              :                     }
     782              :                     else
     783              :                     {
     784            0 :                         U8_LOG_ERROR_INT( "unexpected member name at line",
     785              :                                          json_token_reader_get_input_line( &((*this_).tokenizer) )
     786              :                                        );
     787            0 :                         result = U8_ERROR_PARSER_STRUCTURE;
     788              :                     }
     789              :                 }
     790              :             }
     791              :         }
     792              :         else
     793              :         {
     794            0 :             U8_LOG_ERROR_INT( "unexpected character at line",
     795              :                              json_token_reader_get_input_line( &((*this_).tokenizer) )
     796              :                            );
     797            0 :             result = U8_ERROR_PARSER_STRUCTURE;
     798            0 :             object_end = true;
     799              :         }
     800              :     }
     801              : 
     802              :     /* footer */
     803              : 
     804           13 :     if ( U8_ERROR_NONE == result )
     805              :     {
     806           13 :         data_relationship_trace( out_object );
     807              :     }
     808              : 
     809           13 :     U8_TRACE_END_ERR( result );
     810           13 :     return result;
     811              : }
     812              : 
     813           20 : u8_error_t json_element_reader_skip_next_object ( json_element_reader_t *this_ )
     814              : {
     815           20 :     U8_TRACE_BEGIN();
     816           20 :     u8_error_t result = U8_ERROR_NONE;
     817              : 
     818              :     char member_name_buf[24];
     819           20 :     utf8stringbuf_t member_name = UTF8STRINGBUF( member_name_buf );
     820              : 
     821              :     /* header */
     822              : 
     823           20 :     result = json_token_reader_expect_begin_object ( &((*this_).tokenizer) );
     824              : 
     825              :     /* members */
     826              : 
     827           20 :     bool first_member_passed = false;
     828           20 :     bool object_end = false;
     829           61 :     while (( ! object_end )&&( U8_ERROR_NONE == result ))
     830              :     {
     831           41 :         result = json_token_reader_check_end_object ( &((*this_).tokenizer), &object_end );
     832           41 :         if ( U8_ERROR_NONE == result )
     833              :         {
     834           41 :             if ( ! object_end )
     835              :             {
     836           21 :                 if ( first_member_passed )
     837              :                 {
     838           18 :                     result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
     839              :                 }
     840              :                 else
     841              :                 {
     842            3 :                     first_member_passed = true;
     843              :                 }
     844           21 :                 if ( U8_ERROR_NONE == result )
     845              :                 {
     846           21 :                     result = json_token_reader_read_member_name ( &((*this_).tokenizer), member_name );
     847              :                 }
     848           21 :                 if ( U8_ERROR_NONE == result )
     849              :                 {
     850           21 :                     result = json_token_reader_expect_name_separator ( &((*this_).tokenizer) );
     851              :                 }
     852              :                 json_value_type_t v_type;
     853           21 :                 if ( U8_ERROR_NONE == result )
     854              :                 {
     855           21 :                     result = json_token_reader_get_value_type ( &((*this_).tokenizer), &v_type );
     856              :                 }
     857           21 :                 if ( U8_ERROR_NONE == result )
     858              :                 {
     859           21 :                     switch ( v_type )
     860              :                     {
     861            0 :                         case JSON_VALUE_TYPE_OBJECT:
     862              :                         {
     863            0 :                             result = U8_ERROR_PARSER_STRUCTURE; /* this function does not expect objects in objects */
     864              :                         }
     865            0 :                         break;
     866              : 
     867            0 :                         case JSON_VALUE_TYPE_ARRAY:
     868              :                         {
     869            0 :                             result = U8_ERROR_PARSER_STRUCTURE; /* this function does not expect arrays in objects */
     870              :                         }
     871            0 :                         break;
     872              : 
     873            6 :                         case JSON_VALUE_TYPE_NUMBER:
     874              :                         {
     875              :                             double parsed_number;
     876            6 :                             /* result = */ json_token_reader_read_number_value ( &((*this_).tokenizer), &parsed_number );
     877              :                             /* ignore the U8_ERROR_NOT_YET_IMPLEMENTED here... */
     878              :                         }
     879            6 :                         break;
     880              : 
     881            0 :                         case JSON_VALUE_TYPE_INTEGER:
     882              :                         {
     883              :                             int64_t parsed_integer;
     884            0 :                             result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
     885              :                         }
     886            0 :                         break;
     887              : 
     888           15 :                         case JSON_VALUE_TYPE_STRING:
     889              :                         {
     890           15 :                             result = json_element_reader_skip_next_string( this_ );
     891              :                         }
     892           15 :                         break;
     893              : 
     894            0 :                         case JSON_VALUE_TYPE_BOOLEAN:
     895              :                         {
     896              :                             bool parsed_bool;
     897            0 :                             result = json_token_reader_read_boolean_value ( &((*this_).tokenizer), &parsed_bool );
     898              :                         }
     899            0 :                         break;
     900              : 
     901            0 :                         case JSON_VALUE_TYPE_NULL:
     902              :                         {
     903            0 :                             result = json_token_reader_expect_null_value ( &((*this_).tokenizer) );
     904              :                         }
     905            0 :                         break;
     906              : 
     907            0 :                         case JSON_VALUE_TYPE_UNDEF:
     908              :                         default:
     909              :                         {
     910            0 :                             U8_LOG_ERROR_INT( "unexpected member name at line",
     911              :                                              json_token_reader_get_input_line( &((*this_).tokenizer) )
     912              :                                            );
     913            0 :                             result = U8_ERROR_PARSER_STRUCTURE; /* this function does not expect objects in objects */
     914              :                         }
     915            0 :                         break;
     916              :                     }
     917              :                 }
     918              :             }
     919              :         }
     920              :         else
     921              :         {
     922            0 :             U8_LOG_ERROR_INT( "unexpected character at line",
     923              :                              json_token_reader_get_input_line( &((*this_).tokenizer) )
     924              :                            );
     925            0 :             result = U8_ERROR_PARSER_STRUCTURE;
     926            0 :             object_end = true;
     927              :         }
     928              :     }
     929              : 
     930              :     /* footer */
     931              : 
     932           20 :     U8_TRACE_END_ERR( result );
     933           20 :     return result;
     934              : }
     935              : 
     936           78 : u8_error_t json_element_reader_skip_next_string ( json_element_reader_t *this_ )
     937              : {
     938           78 :     U8_TRACE_BEGIN();
     939           78 :     u8_error_t result = U8_ERROR_NONE;
     940              :     char dummy_str[4];
     941           78 :     utf8stringbuf_t dummy_strbuf = UTF8STRINGBUF ( dummy_str );
     942              : 
     943           78 :     result = json_token_reader_read_string_value ( &((*this_).tokenizer), dummy_strbuf );
     944           78 :     if ( result == U8_ERROR_STRING_BUFFER_EXCEEDED )
     945              :     {
     946              :         /* ignore this. The result string is not needed therefore dummy_str may be too small */
     947           50 :         result = U8_ERROR_NONE;
     948              :     }
     949              : 
     950           78 :     U8_TRACE_END_ERR( result );
     951           78 :     return result;
     952              : }
     953              : 
     954           21 : uint32_t json_element_reader_get_read_line ( json_element_reader_t *this_ )
     955              : {
     956           21 :     U8_TRACE_BEGIN();
     957              : 
     958           21 :     const uint32_t read_line = json_token_reader_get_input_line( &((*this_).tokenizer) );
     959           21 :     U8_TRACE_INFO_INT( "line", read_line );
     960              : 
     961           21 :     U8_TRACE_END();
     962           21 :     return read_line;
     963              : }
     964              : 
     965           22 : u8_error_t json_element_reader_get_next_feature ( json_element_reader_t *this_, data_feature_t *out_object )
     966              : {
     967           22 :     U8_TRACE_BEGIN();
     968           22 :     assert ( NULL != out_object );
     969              : 
     970           22 :     u8_error_t result = U8_ERROR_NONE;
     971              : 
     972              :     char member_name_buf[24];
     973           22 :     utf8stringbuf_t member_name = UTF8STRINGBUF( member_name_buf );
     974              : 
     975           22 :     data_feature_init_empty( out_object );
     976              : 
     977              :     /* header */
     978              : 
     979           22 :     result = json_token_reader_expect_begin_object ( &((*this_).tokenizer) );
     980              : 
     981              :     /* members */
     982              : 
     983           22 :     bool first_member_passed = false;
     984           22 :     bool object_end = false;
     985          194 :     while (( ! object_end )&&( U8_ERROR_NONE == result ))
     986              :     {
     987          172 :         result = json_token_reader_check_end_object ( &((*this_).tokenizer), &object_end );
     988          172 :         if ( U8_ERROR_NONE == result )
     989              :         {
     990          172 :             if ( ! object_end )
     991              :             {
     992          150 :                 if ( first_member_passed )
     993              :                 {
     994          128 :                     result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
     995              :                 }
     996              :                 else
     997              :                 {
     998           22 :                     first_member_passed = true;
     999              :                 }
    1000          150 :                 if ( U8_ERROR_NONE == result )
    1001              :                 {
    1002          150 :                     result = json_token_reader_read_member_name( &((*this_).tokenizer), member_name );
    1003              :                 }
    1004          150 :                 if ( U8_ERROR_NONE == result )
    1005              :                 {
    1006          150 :                     result = json_token_reader_expect_name_separator( &((*this_).tokenizer) );
    1007              :                 }
    1008          150 :                 if ( U8_ERROR_NONE == result )
    1009              :                 {
    1010          150 :                     if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_FEATURE_ID ) )
    1011              :                     {
    1012              :                         int64_t parsed_integer;
    1013           22 :                         result = json_token_reader_read_int_value( &((*this_).tokenizer), &parsed_integer );
    1014           22 :                         data_feature_set_row_id ( out_object, parsed_integer );
    1015              :                     }
    1016          128 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_FEATURE_MAIN_TYPE ) )
    1017              :                     {
    1018              :                         int64_t parsed_integer;
    1019           22 :                         result = json_token_reader_read_int_value( &((*this_).tokenizer), &parsed_integer );
    1020           22 :                         data_feature_set_main_type( out_object, parsed_integer );
    1021              :                     }
    1022          106 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_FEATURE_MAIN_TYPE_NAME ) )
    1023              :                     {
    1024            7 :                         result = json_element_reader_skip_next_string( this_ );
    1025              :                     }
    1026           99 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_FEATURE_LIST_ORDER ) )
    1027              :                     {
    1028              :                         int64_t parsed_integer;
    1029           22 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
    1030           22 :                         data_feature_set_list_order ( out_object, parsed_integer );
    1031              :                     }
    1032           77 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_FEATURE_DESCRIPTION ) )
    1033              :                     {
    1034           22 :                         result = json_element_reader_private_read_string_array( this_, (*this_).temp_string );
    1035           22 :                         data_feature_set_description( out_object,
    1036           22 :                                                       utf8stringbuf_get_string( &((*this_).temp_string) )
    1037              :                                                     );
    1038              :                     }
    1039           55 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_FEATURE_KEY ) )
    1040              :                     {
    1041           22 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
    1042           22 :                         data_feature_set_key( out_object,
    1043           22 :                                               utf8stringbuf_get_string( &((*this_).temp_string) )
    1044              :                                             );
    1045              :                     }
    1046           33 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_FEATURE_VALUE ) )
    1047              :                     {
    1048           22 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
    1049           22 :                         data_feature_set_value( out_object,
    1050           22 :                                                 utf8stringbuf_get_string( &((*this_).temp_string) )
    1051              :                                               );
    1052              :                     }
    1053           11 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_UUID ) )
    1054              :                     {
    1055           11 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
    1056           11 :                         result |= data_feature_set_uuid( out_object,
    1057           11 :                                                          utf8stringbuf_get_string( &((*this_).temp_string) )
    1058              :                                                        );
    1059              :                     }
    1060              :                     else
    1061              :                     {
    1062            0 :                         U8_LOG_ERROR_INT( "unexpected member name at line",
    1063              :                                          json_token_reader_get_input_line( &((*this_).tokenizer) )
    1064              :                                        );
    1065            0 :                         result = U8_ERROR_PARSER_STRUCTURE;
    1066              :                     }
    1067              :                 }
    1068              :             }
    1069              :         }
    1070              :         else
    1071              :         {
    1072            0 :             U8_LOG_ERROR_INT( "unexpected character at line",
    1073              :                              json_token_reader_get_input_line( &((*this_).tokenizer) )
    1074              :                            );
    1075            0 :             result = U8_ERROR_PARSER_STRUCTURE;
    1076            0 :             object_end = true;
    1077              :         }
    1078              :     }
    1079              : 
    1080              :     /* footer */
    1081              : 
    1082           22 :     if ( U8_ERROR_NONE == result )
    1083              :     {
    1084           22 :         data_feature_trace( out_object );
    1085              :     }
    1086              : 
    1087           22 :     U8_TRACE_END_ERR( result );
    1088           22 :     return result;
    1089              : }
    1090              : 
    1091            7 : u8_error_t json_element_reader_get_next_diagramelement( json_element_reader_t *this_,
    1092              :                                                         data_diagramelement_t *out_object,
    1093              :                                                         utf8stringbuf_t out_node_uuid )
    1094              : {
    1095            7 :     U8_TRACE_BEGIN();
    1096            7 :     assert ( NULL != out_object );
    1097              : 
    1098            7 :     u8_error_t result = U8_ERROR_NONE;
    1099              : 
    1100              :     char member_name_buf[24];
    1101            7 :     utf8stringbuf_t member_name = UTF8STRINGBUF( member_name_buf );
    1102              : 
    1103            7 :     data_diagramelement_init_empty( out_object );
    1104              : 
    1105              :     /* header */
    1106              : 
    1107            7 :     result = json_token_reader_expect_begin_object ( &((*this_).tokenizer) );
    1108              : 
    1109              :     /* members */
    1110              : 
    1111            7 :     bool first_member_passed = false;
    1112            7 :     bool object_end = false;
    1113           77 :     while (( ! object_end )&&( U8_ERROR_NONE == result ))
    1114              :     {
    1115           70 :         result = json_token_reader_check_end_object ( &((*this_).tokenizer), &object_end );
    1116           70 :         if ( U8_ERROR_NONE == result )
    1117              :         {
    1118           70 :             if ( ! object_end )
    1119              :             {
    1120           63 :                 if ( first_member_passed )
    1121              :                 {
    1122           56 :                     result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
    1123              :                 }
    1124              :                 else
    1125              :                 {
    1126            7 :                     first_member_passed = true;
    1127              :                 }
    1128           63 :                 if ( U8_ERROR_NONE == result )
    1129              :                 {
    1130           63 :                     result = json_token_reader_read_member_name( &((*this_).tokenizer), member_name );
    1131              :                 }
    1132           63 :                 if ( U8_ERROR_NONE == result )
    1133              :                 {
    1134           63 :                     result = json_token_reader_expect_name_separator( &((*this_).tokenizer) );
    1135              :                 }
    1136           63 :                 if ( U8_ERROR_NONE == result )
    1137              :                 {
    1138           63 :                     if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_ID ) )
    1139              :                     {
    1140              :                         int64_t parsed_integer;
    1141            7 :                         result = json_token_reader_read_int_value( &((*this_).tokenizer), &parsed_integer );
    1142            7 :                         data_diagramelement_set_row_id ( out_object, parsed_integer );
    1143              :                     }
    1144           56 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_DIAGRAM_ID ) )
    1145              :                     {
    1146              :                         int64_t parsed_integer;
    1147            0 :                         result = json_token_reader_read_int_value( &((*this_).tokenizer), &parsed_integer );
    1148            0 :                         data_diagramelement_set_diagram_row_id( out_object, parsed_integer );
    1149              :                     }
    1150           56 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_CLASSIFIER_ID ) )
    1151              :                     {
    1152              :                         int64_t parsed_integer;
    1153            7 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
    1154            7 :                         data_diagramelement_set_classifier_row_id ( out_object, parsed_integer );
    1155              :                     }
    1156           49 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_CLASSIFIER_NAME ) )
    1157              :                     {
    1158            7 :                         result = json_element_reader_skip_next_string( this_ );
    1159              :                     }
    1160           42 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_FOCUSED_FEATURE_ID ) )
    1161              :                     {
    1162              :                         int64_t parsed_integer;
    1163            7 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
    1164            7 :                         data_diagramelement_set_focused_feature_row_id ( out_object, parsed_integer );
    1165              :                     }
    1166           35 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_FOCUSED_FEATURE_NAME ) )
    1167              :                     {
    1168            7 :                         result = json_element_reader_skip_next_string( this_ );
    1169              :                     }
    1170           28 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_DISPLAY_FLAGS ) )
    1171              :                     {
    1172              :                         int64_t parsed_integer;
    1173            7 :                         result = json_token_reader_read_int_value ( &((*this_).tokenizer), &parsed_integer );
    1174            7 :                         data_diagramelement_set_display_flags ( out_object, parsed_integer );
    1175              :                     }
    1176           21 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_DISPLAY_FLAG_NAMES ) )
    1177              :                     {
    1178            7 :                         result = json_element_reader_skip_next_string( this_ );
    1179              :                     }
    1180           14 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_DIAGRAMELEMENT_NODE ) )
    1181              :                     {
    1182            7 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), out_node_uuid );
    1183              :                     }
    1184            7 :                     else if ( utf8stringbuf_equals_str( &member_name, JSON_CONSTANTS_KEY_UUID ) )
    1185              :                     {
    1186            7 :                         result = json_token_reader_read_string_value( &((*this_).tokenizer), (*this_).temp_string );
    1187            7 :                         result |= data_diagramelement_set_uuid( out_object,
    1188            7 :                                                                 utf8stringbuf_get_string( &((*this_).temp_string) )
    1189              :                                                               );
    1190              :                     }
    1191              :                     else
    1192              :                     {
    1193            0 :                         U8_LOG_ERROR_INT( "unexpected member name at line",
    1194              :                                          json_token_reader_get_input_line( &((*this_).tokenizer) )
    1195              :                                        );
    1196            0 :                         result = U8_ERROR_PARSER_STRUCTURE;
    1197              :                     }
    1198              :                 }
    1199              :             }
    1200              :         }
    1201              :         else
    1202              :         {
    1203            0 :             U8_LOG_ERROR_INT( "unexpected character at line",
    1204              :                              json_token_reader_get_input_line( &((*this_).tokenizer) )
    1205              :                            );
    1206            0 :             result = U8_ERROR_PARSER_STRUCTURE;
    1207            0 :             object_end = true;
    1208              :         }
    1209              :     }
    1210              : 
    1211              :     /* footer */
    1212              : 
    1213            7 :     if ( U8_ERROR_NONE == result )
    1214              :     {
    1215            7 :         data_diagramelement_trace( out_object );
    1216              :     }
    1217              : 
    1218            7 :     U8_TRACE_END_ERR( result );
    1219            7 :     return result;
    1220              : }
    1221              : 
    1222           57 : u8_error_t json_element_reader_private_read_string_array ( json_element_reader_t *this_,
    1223              :                                                            utf8stringbuf_t out_joined_string )
    1224              : {
    1225           57 :     U8_TRACE_BEGIN();
    1226           57 :     u8_error_t result = U8_ERROR_NONE;
    1227              : 
    1228           57 :     utf8stringbuf_clear( &out_joined_string );
    1229              : 
    1230           57 :     result = json_token_reader_expect_begin_array( &((*this_).tokenizer) );
    1231              : 
    1232           57 :     bool end_array = false;
    1233           57 :     bool first_element_passed = false;
    1234          173 :     while (( ! end_array )&&( U8_ERROR_NONE == result ))
    1235              :     {
    1236          116 :         result = json_token_reader_check_end_array( &((*this_).tokenizer), &end_array );
    1237          116 :         if ( U8_ERROR_NONE == result )
    1238              :         {
    1239          116 :             if ( ! end_array )
    1240              :             {
    1241           59 :                 if ( first_element_passed )
    1242              :                 {
    1243           14 :                     result = json_token_reader_expect_value_separator ( &((*this_).tokenizer) );
    1244              :                 }
    1245              :                 else
    1246              :                 {
    1247           45 :                     first_element_passed = true;
    1248              :                 }
    1249           59 :                 utf8stringbuf_t unused_remaining = utf8stringbuf_get_end( &out_joined_string );
    1250           59 :                 result |= json_token_reader_read_string_value( &((*this_).tokenizer), unused_remaining );
    1251              :             }
    1252              :         }
    1253              :         else
    1254              :         {
    1255              :             /* error, break loop */
    1256            0 :             U8_LOG_ERROR_INT( "unexpected array contents at line",
    1257              :                              json_token_reader_get_input_line( &((*this_).tokenizer) )
    1258              :                            );
    1259              :         }
    1260              :     }
    1261              : 
    1262           57 :     U8_TRACE_END_ERR( result );
    1263           57 :     return result;
    1264              : }
    1265              : 
    1266              : 
    1267              : /*
    1268              : Copyright 2016-2025 Andreas Warnke
    1269              : 
    1270              : Licensed under the Apache License, Version 2.0 (the "License");
    1271              : you may not use this file except in compliance with the License.
    1272              : You may obtain a copy of the License at
    1273              : 
    1274              :     http://www.apache.org/licenses/LICENSE-2.0
    1275              : 
    1276              : Unless required by applicable law or agreed to in writing, software
    1277              : distributed under the License is distributed on an "AS IS" BASIS,
    1278              : WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    1279              : See the License for the specific language governing permissions and
    1280              : limitations under the License.
    1281              : */
        

Generated by: LCOV version 2.0-1