Skip to content

Commit 7e6d22a

Browse files
committed
remove limit for unnamed fields
1 parent 64fbb1c commit 7e6d22a

6 files changed

Lines changed: 28 additions & 50 deletions

File tree

app/src/schema_display.c

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -351,28 +351,25 @@ parser_error_t schema_display_tuple(parser_tx_t *txObj) {
351351
CHECK_ERROR(read_tuple(&txObj->merkle_proofs.leaves.data, &tuple_type));
352352
CHECK_ERROR(schema_reset_leaf_offset(&txObj->merkle_proofs.leaves));
353353

354-
uint32_t field_index[MAX_FIELDS_QTY] = {0};
355-
uint16_t index_qty = 0;
356-
uint32_t max_indexes = MAX_FIELDS_QTY;
357-
CHECK_ERROR(get_unnamed_link_index(tuple_type.fields, tuple_type.fields_qty, field_index, &index_qty, max_indexes));
358-
359-
for (uint32_t i = 0; i < index_qty; i++) {
360-
uint8_t type = 0;
361-
CHECK_ERROR(get_schema_type(txObj, field_index[i], &type));
362-
print_u8("Type: ", type);
363-
if (type == LINKING_SCHEME_INTEGER) {
364-
// TODO: Implement me
365-
print_string("schema_display_tuple IMPLEMENT ME 0");
366-
return parser_unexpected_type;
367-
}
368-
}
354+
// for (uint32_t i = 0; i < index_qty; i++) {
355+
// uint8_t type = 0;
356+
// CHECK_ERROR(get_schema_type(txObj, field_index[i], &type));
357+
// print_u8("Type: ", type);
358+
// if (type == LINKING_SCHEME_INTEGER) {
359+
// // TODO: Implement me
360+
// print_string("schema_display_tuple IMPLEMENT ME 0");
361+
// return parser_unexpected_type;
362+
// }
363+
// }
369364

365+
unnamed_field_t unnamed_field = {0};
370366
if (tuple_type.has_show_as || tuple_type.has_structured_show_as) {
371367
for (uint32_t i = 0; i < tuple_type.fields_qty; i++) {
372-
// TODO: check context_bytes and container_context
373-
switch (tuple_type.fields[i].value.tag) {
368+
MEMZERO(&unnamed_field, sizeof(unnamed_field_t));
369+
CHECK_ERROR(read_unnamed_field(&tuple_type.unnamed_fields, &unnamed_field));
370+
switch (unnamed_field.value.tag) {
374371
case LINK_BY_INDEX:
375-
CHECK_ERROR(schema_display_generic_by_index(txObj, tuple_type.fields[i].value.data.by_index));
372+
CHECK_ERROR(schema_display_generic_by_index(txObj, unnamed_field.value.data.by_index));
376373
break;
377374
default:
378375
print_string("Tuple field is not a link by index\n");
@@ -381,13 +378,14 @@ parser_error_t schema_display_tuple(parser_tx_t *txObj) {
381378
}
382379
} else {
383380
for (uint32_t i = 0; i < tuple_type.fields_qty; i++) {
384-
// TODO: check context_bytes and container_context
385-
switch (tuple_type.fields[i].value.tag) {
381+
MEMZERO(&unnamed_field, sizeof(unnamed_field_t));
382+
CHECK_ERROR(read_unnamed_field(&tuple_type.unnamed_fields, &unnamed_field));
383+
switch (unnamed_field.value.tag) {
386384
case LINK_BY_INDEX:
387-
CHECK_ERROR(schema_display_generic_by_index(txObj, tuple_type.fields[i].value.data.by_index));
385+
CHECK_ERROR(schema_display_generic_by_index(txObj, unnamed_field.value.data.by_index));
388386
break;
389387
case LINK_IMMEDIATE:
390-
CHECK_ERROR(schema_display_by_primitive(txObj, &tuple_type.fields[i].value.data.immediate));
388+
CHECK_ERROR(schema_display_by_primitive(txObj, &unnamed_field.value.data.immediate));
391389
break;
392390
default:
393391
print_string("Tuple field is not a link by index\n");
@@ -397,7 +395,7 @@ parser_error_t schema_display_tuple(parser_tx_t *txObj) {
397395
return parser_ok;
398396
}
399397

400-
if (!tuple_type.fields[i].is_expert || ui_expert_mode) {
398+
if (!unnamed_field.is_expert || ui_expert_mode) {
401399
char index_str[12] = {0};
402400
snprintf(index_str, sizeof(index_str), "%u", i);
403401
CHECK_ERROR(append_item_title(index_str, strlen(index_str)));

app/src/schema_helper.c

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -77,22 +77,6 @@ parser_error_t schema_reset_leaf_offset(merkle_leaves_data_t *leaves) {
7777
return parser_ok;
7878
}
7979

80-
parser_error_t get_unnamed_link_index(unnamed_field_t *fields, uint32_t fields_qty, uint32_t field_index[], uint16_t *qty,
81-
uint16_t max_indexes) {
82-
CHECK_INPUT(fields);
83-
CHECK_INPUT(field_index);
84-
CHECK_INPUT(qty);
85-
*qty = 0;
86-
87-
for (uint32_t i = 0; i < fields_qty; i++) {
88-
if (fields[i].value.tag == LINK_BY_INDEX) {
89-
field_index[(*qty)++] = fields[i].value.data.by_index;
90-
}
91-
}
92-
93-
return (*qty >= max_indexes) ? parser_scheme_unnamed_link_index_overflow : parser_ok;
94-
}
95-
9680
parser_error_t get_schema_type(parser_tx_t *txObj, uint32_t index, uint8_t *type) {
9781
CHECK_INPUT(txObj);
9882
CHECK_INPUT(type);

app/src/schema_helper.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ extern "C" {
2525
bool schema_find_index(uint64_t index_leaf, merkle_leaves_indices_t *indices, uint64_t *index_vec);
2626
parser_error_t schema_move_leaf_offset(merkle_leaves_data_t *leaves, uint64_t index);
2727
parser_error_t schema_reset_leaf_offset(merkle_leaves_data_t *leaves);
28-
parser_error_t get_unnamed_link_index(unnamed_field_t *fields, uint32_t fields_qty, uint32_t field_index[], uint16_t *qty,
29-
uint16_t max_indexes);
3028
parser_error_t get_schema_type(parser_tx_t *txObj, uint32_t index, uint8_t *type);
3129
bool is_link_skip(link_t *link);
3230

app/src/schema_reader.c

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -466,10 +466,8 @@ parser_error_t read_struct(parser_context_t *ctx, schema_struct_t *schema_struct
466466

467467
// read fields
468468
CHECK_ERROR(read_u32(ctx, &schema_struct->fields_qty));
469-
if (schema_struct->fields_qty > MAX_FIELDS_QTY) {
470-
return parser_too_many_fields;
471-
}
472469
print_u32("fields_qty:", schema_struct->fields_qty);
470+
473471
schema_struct->named_fields.buffer.ptr = ctx->buffer.ptr + ctx->offset;
474472
uint16_t offset_mem = ctx->offset;
475473
for (uint32_t i = 0; i < schema_struct->fields_qty; i++) {
@@ -526,15 +524,15 @@ parser_error_t read_tuple(parser_context_t *ctx, schema_tuple_t *schema_tuple) {
526524

527525
// read fields
528526
CHECK_ERROR(read_u32(ctx, &schema_tuple->fields_qty));
529-
if (schema_tuple->fields_qty > MAX_FIELDS_QTY) {
530-
return parser_too_many_fields;
531-
}
532527
print_u32("fields_qty:", schema_tuple->fields_qty);
528+
529+
schema_tuple->unnamed_fields.buffer.ptr = ctx->buffer.ptr + ctx->offset;
530+
uint16_t offset_mem = ctx->offset;
533531
for (uint32_t i = 0; i < schema_tuple->fields_qty; i++) {
534532
unnamed_field_t field = {0};
535533
CHECK_ERROR(read_unnamed_field(ctx, &field));
536-
schema_tuple->fields[i] = field;
537534
}
535+
schema_tuple->unnamed_fields.buffer.len = ctx->offset - offset_mem;
538536

539537
// read structured_display_overrides
540538
CHECK_ERROR(read_structured_display_overrides(ctx, &schema_tuple->structured_display_overrides));

app/src/schema_reader.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ parser_error_t read_link(parser_context_t *ctx, link_t *link);
3131
parser_error_t read_enum_variant(parser_context_t *ctx, enum_variant_t *variant);
3232
parser_error_t read_name_registry(parser_context_t *ctx, name_registry_t *name_registry);
3333
parser_error_t read_named_field(parser_context_t *ctx, named_field_t *field);
34+
parser_error_t read_unnamed_field(parser_context_t *ctx, unnamed_field_t *field);
3435
parser_error_t read_registry(parser_context_t *ctx, registry_t *registry);
3536

3637
parser_error_t metadata_read(parser_context_t *ctx, parser_tx_t *txObj);

app/src/txdefs/schema_txdef.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ extern "C" {
2323
#include "crypto_helper.h"
2424
#include "merkle_txdef.h"
2525

26-
#define MAX_FIELDS_QTY 20
2726
#define MAX_HRP_LEN 83
2827

2928
typedef enum {
@@ -230,7 +229,7 @@ typedef struct {
230229
bytes_t structured_show_as;
231230
bool peekable;
232231
uint32_t fields_qty;
233-
unnamed_field_t fields[MAX_FIELDS_QTY];
232+
parser_context_t unnamed_fields;
234233
structured_display_overrides_t structured_display_overrides;
235234
} schema_tuple_t;
236235

0 commit comments

Comments
 (0)