Errors

A call can fail because a definition is missing, a document is invalid, or the database refuses a change. The examples use the people data to show these results. Use the status and diagnostic fields to identify the failure.

Binding errors

LanguageFailure
CReturns a status. The owner that its operation names holds the diagnostic.
GoReturns *Error.
RustReturns Result<_, Error>.
ClojureThrows clojure.lang.ExceptionInfo with diagnostic data.
PythonRaises StardustError.
OdinReturns an Error beside its result.

The error record gives the fields in your language. Statuses gives the failure conditions of each operation.

stardust_diagnostic_view

This record describes a failure with its status and diagnostic. The binding copies the diagnostic before it releases the native owner.

FieldC typeUnitRangeDefaultAbsentMeaning
codestardust_bytesNoneC type rangeThe call sets itAlways present—
messagestardust_bytesNoneC type rangeThe call sets itAlways present—
pathstardust_bytesNoneC type rangeThe call sets itpresent & STARDUST_DIAGNOSTIC_PATH is zeroRead this field only when present & STARDUST_DIAGNOSTIC_PATH is not zero. The call can report an empty string or zero.
fieldstardust_bytesNoneC type rangeThe call sets itpresent & STARDUST_DIAGNOSTIC_FIELD is zeroRead this field only when present & STARDUST_DIAGNOSTIC_FIELD is not zero. The call can report an empty string or zero.
entityint64_tNoneSigned i64The call sets itpresent & STARDUST_DIAGNOSTIC_ENTITY is zeroRead this field only when present & STARDUST_DIAGNOSTIC_ENTITY is not zero. The call can report an empty string or zero.
offsetint64_tBytesSigned i64The call sets itpresent & STARDUST_DIAGNOSTIC_OFFSET is zeroRead this field only when present & STARDUST_DIAGNOSTIC_OFFSET is not zero. The call can report an empty string or zero.
presentuint32_tNoneUnsigned u32The call sets itAlways presentPresence-bit mask: test each STARDUST_DIAGNOSTIC_* bit before you read its optional field.
reserveduint32_tNoneUnsigned u320Always presentMust be zero.

Statuses

A C call returns its status. Examine a returned error owner when the operation provides one. Status-only calls have no new diagnostic.

STARDUST_INVALID_ARGUMENT

WhenOperations
the entity ID is outside the user entity range, max_depth is negative or above 32, or max_entities is negativestardust_db_read_entity
a required input or output pointer is NULL, or an input owner is not readystardust_abi_version, stardust_document_builder_create, stardust_document_root, stardust_document_count, stardust_expr_build, stardust_expr_evaluate, stardust_db_query_open, stardust_db_mutation_open, stardust_db_expression_build, stardust_db_rows_next, stardust_db_definition_get, stardust_db_definition_patch, stardust_plugins, stardust_license
the text is malformed, the format is unknown or a number is outside i64 or finite f64stardust_parse
the format is unknown or the width is negativestardust_serialize
a node breaks the preorder rules or has an invalid kind or numberstardust_document_builder_add_many
the builder has no root or a container is still openstardust_document_builder_seal
start is past the last node or capacity is negativestardust_document_read_many
id is not an object node of the documentstardust_document_member
the node is not an integer numberstardust_document_i64
the node is not a number or its value overflows f64stardust_document_f64
the arguments include an undeclared macro parameterstardust_macro_build, stardust_macro_expand
the file is not a database, an option is invalid or selected plugins are incompatiblestardust_db_open
the parameters or run options are invalidstardust_db_query_run, stardust_db_mutation_run
the parameters or subscription options are invalidstardust_db_query_subscribe
max_wait is negativestardust_db_subscription_next, stardust_db_indexes_sync
the patch is not an entity-keyed object, or a link names an ID outside the user entity rangestardust_db_merge_patch
the kind, action, revision or page limits are invalid, or the selected plan cannot run the current authored definitionstardust_db_plan
the kind or the pattern is invalidstardust_db_definition_list
a bulk build is already in progress on the databasestardust_db_bulk_begin
no bulk build is in progressstardust_db_bulk_add, stardust_db_bulk_finish
a name is empty, the plugin has no call operation with the name, or the plugin refuses the requeststardust_db_plugin_call
a name is empty, the plugin has no stream operation with the name, or the plugin refuses the requeststardust_db_plugin_stream_open
the stream has finished or does not accept writesstardust_db_plugin_stream_write
the stream does not support reads, or length is negativestardust_db_plugin_stream_read
the stream does not support seeks, whence is unknown, or the position is negative or past the i64 rangestardust_db_plugin_stream_seek
the stream has finished or has no finish stepstardust_db_plugin_stream_finish
the token is empty or longer than 4096 bytesstardust_activate

STARDUST_INVALID_JSON

WhenOperations
JSON text is malformedstardust_parse

STARDUST_COMPILE_FAILED

WhenOperations
the expression does not compilestardust_expr_build
the expansion does not compilestardust_macro_build
the expanded expression does not compilestardust_db_expression_build

STARDUST_EVALUATION_FAILED

WhenOperations
the expression fails on the inputstardust_expr_evaluate
the query fails or exceeds max_coststardust_db_query_run
the page does not renderstardust_db_rows_next
a rerun of the query failed. Every later call reports this failurestardust_db_subscription_next
the mutation failsstardust_db_mutation_run
the plugin cannot read its stored statestardust_db_plugin_call, stardust_db_plugin_stream_open
stored bytes do not match their digeststardust_db_plugin_stream_read

STARDUST_OUT_OF_MEMORY

STARDUST_NOT_FOUND

WhenOperations
the object has no member with the keystardust_document_member
the macro refers to an unknown macrostardust_macro_build, stardust_macro_expand
the parent directory is missing, or the file is missing and create is falsestardust_db_open
no definition is stored at the pathstardust_db_query_open, stardust_db_mutation_open, stardust_db_definition_get
no expression is stored at the pathstardust_db_expression_build
the stored query definition was deletedstardust_db_query_run
the definition or exact historical plan revision does not existstardust_db_plan
the plugin reports that the request names nothing it holdsstardust_db_plugin_call, stardust_db_plugin_stream_open

STARDUST_LOCKED

WhenOperations
another process holds the lock after lock_timeoutstardust_db_open

STARDUST_CONFLICT

WhenOperations
an enabled plugin finds the database inconsistent with its copies: backups refuse diverging copies with code backup_history_divergent, naming themstardust_db_open
concurrent writes prevent the commitstardust_db_mutation_run
an entity revision check fails or a concurrent writer prevents the commit; a revision mismatch reports the entity and expected and actual revisionsstardust_db_merge_patch
the authored definition or accepted plan changed before the explicit control committedstardust_db_plan
another write committed to the database during the buildstardust_db_bulk_finish
the plugin's write lost to a concurrent change, or the database holds writesstardust_db_plugin_call
the database holds writesstardust_db_plugin_stream_open, stardust_db_plugin_stream_finish
the database holds writes while the plugin stores the bytesstardust_db_plugin_stream_write

STARDUST_INVALID_DEFINITION

WhenOperations
the macro is invalid or expands recursivelystardust_macro_build, stardust_macro_expand
the definition is invalidstardust_db_query_open, stardust_db_mutation_open
a macro it calls is invalid or expands recursivelystardust_db_expression_build
the loaded query definition is invalidstardust_db_query_run
the query or its callable definitions are invalidstardust_db_query_subscribe
the mutation selection or definition is invalidstardust_db_mutation_run
the patched definition is invalidstardust_db_definition_patch

STARDUST_SCHEMA_VIOLATION

WhenOperations
the write breaks a schemastardust_db_mutation_run

STARDUST_INVALID_COMMIT_TIME

WhenOperations
the #_tx commit time is not later than the last commitstardust_db_merge_patch

STARDUST_CLOSED

STARDUST_REJECTED

WhenOperations
a mutation target or write guard refuses the writestardust_db_mutation_run
the database refuses the patch; the code and diagnostic path name the reason and keystardust_db_merge_patch
the database refuses the patch; the build has failed and later adds report the same statusstardust_db_bulk_add
the database refuses a patch; an initial build publishes nothing and fallback keeps earlier commitsstardust_db_bulk_finish

STARDUST_UNSUPPORTED

No core operation reports this status.

STARDUST_CANCELLED

WhenOperations
the subscription is cancelled or closedstardust_db_subscription_next

STARDUST_TIMEOUT

WhenOperations
max_wait passed firststardust_db_indexes_sync
the plugin's wait passed its limitstardust_db_plugin_call

STARDUST_UNAVAILABLE

WhenOperations
an enabled plugin cannot reach what the open needs: backups refuse with backup_targets_unreachable, backup_target_unreadable or backup_objects_requiredstardust_db_open
the patch sets stardust/history and no enabled plugin purges historystardust_db_mutation_run, stardust_db_merge_patch
the plugin is unknown or the database does not enable itstardust_db_plugin_call, stardust_db_plugin_stream_open

STARDUST_FAILED

WhenOperations
the plugin's work failedstardust_db_plugin_call

STARDUST_UNLICENSED

WhenOperations
the token is refused; the error names the reasonstardust_activate

Refusal examples

The generator captured each result from the native library.

convert

duplicate_text holds this document:

TRON24 B
Offset (hex)Bytes (hex)Meaning
0054 52 4F 4Emagic TRON
04BC 7B3A612031203A 6120327Dtxt "{:a 1 :a 2}"
c640 B
stardust_document *source = NULL;
uint32_t root = 0;
stardust_node_view view = {0};
int64_t written = 0;
uint32_t status = stardust_parse(duplicate_text, STARDUST_TRON, &source);
if (status == STARDUST_OK) status = stardust_document_root(source, &root);
if (status == STARDUST_OK) status = stardust_document_read_many(source, root, 1, &view, &written);
if (status != STARDUST_OK) {stardust_document_release(source); return status;}
stardust_document *failed = NULL;
status = stardust_parse(view.text, STARDUST_EDN, &failed);
stardust_document_release(source);
stardust_diagnostic_view result = {0};
stardust_document_error(failed, &result);
TRON254 B
Offset (hex)Bytes (hex)Meaning
0054 52 4F 4Emagic TRON
046C 737461747573txt "status"
0B14 10 696E76616C69 645F617267756D65 6E74txt "invalid_argument"
1D0F 0A 04000000 0B00 0000map leaf, size 10: @4 → @B
276C 656E74697479txt "entity"
2E00nil
2F0F 0A 27000000 2E00 0000map leaf, size 10: @27 → @2E
397C 6D657373616765txt "message"
4114 27 696E76616C69 642045444E202844 75706C6963617465 5F4B657929206174 206F666673657420 36txt "invalid EDN (Duplicate_K…"
6A0F 0A 39000000 4100 0000map leaf, size 10: @39 → @41
7407 0E 08020000 2F00 0000 6A000000map branch, size 14, depth 1, slots 3, 9: @2F → @6A
824C 70617468txt "path"
8700nil
880F 0A 82000000 8700 0000map leaf, size 10: @82 → @87
925C 6669656C64txt "field"
9800nil
990F 0A 92000000 9800 0000map leaf, size 10: @92 → @98
A34C 636F6465txt "code"
A8BC 696E76616C6964 5F65646Etxt "invalid_edn"
B40F 0A A3000000 A800 0000map leaf, size 10: @A3 → @A8
BE6C 6F6666736574txt "offset"
C502 06000000000000 00i64 6
CE0F 0A BE000000 C500 0000map leaf, size 10: @BE → @C5
D807 1E 51620000 1D00 0000 74000000 8800 0000 99000000 B400 0000 CE000000map branch, size 30, depth 0 (root), slots 0, 4, 6, 9, 13, 14: @1D → @74 → @88 → @99 → @B4 → @CE

Refuse a metadata-only transaction

patch_text holds this document:

TRON46 B
Offset (hex)Bytes (hex)Meaning
0054 52 4F 4Emagic TRON
046C 617574686F72txt "author"
0B1C 78txt "x"
0D0F 0A 04000000 0B00 0000map leaf, size 10: @4 → @B
174C 235F7478txt "#_tx"
1C0F 0A 17000000 0D00 0000map leaf, size 10: @17 → @D
c390 B
stardust_document *patch = NULL;
stardust_result *failed = NULL;
uint32_t status = stardust_parse(patch_text, STARDUST_TRON, &patch);
if (status != STARDUST_OK) {stardust_document_release(patch); return status;}
status = stardust_db_merge_patch(db, patch, NULL, NULL, &failed);
stardust_document_release(patch);
stardust_diagnostic_view result = {0};
stardust_result_error(failed, &result);
TRON263 B
Offset (hex)Bytes (hex)Meaning
00054 52 4F 4Emagic TRON
0046C 737461747573txt "status"
00B8C 72656A65637465 64txt "rejected"
0140F 0A 04000000 0B00 0000map leaf, size 10: @4 → @B
01E6C 656E74697479txt "entity"
02500nil
0260F 0A 1E000000 2500 0000map leaf, size 10: @1E → @25
0307C 6D657373616765txt "message"
03814 37 612070617463 68206F66206F6E6C 7920235F74782069 7320726566757365 643A20235F747820 616E6E6F74617465 7320612077726974 65txt "a patch of only #_tx is …"
0710F 0A 30000000 3800 0000map leaf, size 10: @30 → @38
07B07 0E 08020000 2600 0000 71000000map branch, size 14, depth 1, slots 3, 9: @26 → @71
0894C 70617468txt "path"
08E4C 235F7478txt "#_tx"
0930F 0A 89000000 8E00 0000map leaf, size 10: @89 → @8E
09D5C 6669656C64txt "field"
0A300nil
0A40F 0A 9D000000 A300 0000map leaf, size 10: @9D → @A3
0AE4C 636F6465txt "code"
0B314 10 7472616E7361 6374696F6E5F6F6E 6C79txt "transaction_only"
0C50F 0A AE000000 B300 0000map leaf, size 10: @AE → @B3
0CF6C 6F6666736574txt "offset"
0D600nil
0D70F 0A CF000000 D600 0000map leaf, size 10: @CF → @D6
0E107 1E 51620000 1400 0000 7B000000 9300 0000 A4000000 C500 0000 D7000000map branch, size 30, depth 0 (root), slots 0, 4, 6, 9, 13, 14: @14 → @7B → @93 → @A4 → @C5 → @D7

Refuse a repeated commit time

future_text holds this document:

TRON145 B
Offset (hex)Bytes (hex)Meaning
0054 52 4F 4Emagic TRON
041C 78txt "x"
0602 01000000000000 00i64 1
0F0F 0A 04000000 0600 0000map leaf, size 10: @4 → @6
194C 23757463txt "#utc"
1E14 14 323230302D30 312D30315430303A 30303A30305Atxt "2200-01-01T00:00:00Z"
340F 0A 19000000 1E00 0000map leaf, size 10: @19 → @1E
3E14 14 737461726475 73742F636F6D6D69 747465644174txt "stardust/committedAt"
540F 0A 3E000000 3400 0000map leaf, size 10: @3E → @34
5E4C 235F7478txt "#_tx"
630F 0A 5E000000 5400 0000map leaf, size 10: @5E → @54
6D3C 235F64txt "#_d"
710F 0A 6D000000 0F00 0000map leaf, size 10: @6D → @F
7B07 0E 08010000 6300 0000 71000000map branch, size 14, depth 0 (root), slots 3, 8: @63 → @71

patch_text holds this document:

TRON145 B
Offset (hex)Bytes (hex)Meaning
0054 52 4F 4Emagic TRON
041C 78txt "x"
0602 02000000000000 00i64 2
0F0F 0A 04000000 0600 0000map leaf, size 10: @4 → @6
194C 23757463txt "#utc"
1E14 14 323230302D30 312D30315430303A 30303A30305Atxt "2200-01-01T00:00:00Z"
340F 0A 19000000 1E00 0000map leaf, size 10: @19 → @1E
3E14 14 737461726475 73742F636F6D6D69 747465644174txt "stardust/committedAt"
540F 0A 3E000000 3400 0000map leaf, size 10: @3E → @34
5E4C 235F7478txt "#_tx"
630F 0A 5E000000 5400 0000map leaf, size 10: @5E → @54
6D3C 235F65txt "#_e"
710F 0A 6D000000 0F00 0000map leaf, size 10: @6D → @F
7B07 0E 08010000 6300 0000 71000000map branch, size 14, depth 0 (root), slots 3, 8: @63 → @71
c716 B
stardust_document *future = NULL;
stardust_document *patch = NULL;
stardust_result *committed = NULL;
uint32_t status = stardust_parse(future_text, STARDUST_TRON, &future);
if (status == STARDUST_OK) status = stardust_parse(patch_text, STARDUST_TRON, &patch);
if (status == STARDUST_OK) status = stardust_db_merge_patch(db, future, NULL, NULL, &committed);
stardust_result_release(committed);
stardust_document_release(future);
if (status != STARDUST_OK) {stardust_document_release(patch); return status;}
stardust_result *failed = NULL;
status = stardust_db_merge_patch(db, patch, NULL, NULL, &failed);
stardust_document_release(patch);
stardust_diagnostic_view result = {0};
stardust_result_error(failed, &result);
TRON290 B
Offset (hex)Bytes (hex)Meaning
00054 52 4F 4Emagic TRON
0046C 737461747573txt "status"
00B14 13 696E76616C69 645F636F6D6D6974 5F74696D65txt "invalid_commit_time"
0200F 0A 04000000 0B00 0000map leaf, size 10: @4 → @B
02A6C 656E74697479txt "entity"
03100nil
0320F 0A 2A000000 3100 0000map leaf, size 10: @2A → @31
03C7C 6D657373616765txt "message"
04414 47 737461726475 73742F636F6D6D69 747465644174206D 7573742062652073 74726963746C7920 6E65776572207468 616E20746865206C 617465737420636F 6D6D69742074696D 65txt "stardust/committedAt mus…"
08D0F 0A 3C000000 4400 0000map leaf, size 10: @3C → @44
09707 0E 08020000 3200 0000 8D000000map branch, size 14, depth 1, slots 3, 9: @32 → @8D
0A54C 70617468txt "path"
0AA00nil
0AB0F 0A A5000000 AA00 0000map leaf, size 10: @A5 → @AA
0B55C 6669656C64txt "field"
0BB00nil
0BC0F 0A B5000000 BB00 0000map leaf, size 10: @B5 → @BB
0C64C 636F6465txt "code"
0CB14 13 696E76616C69 645F636F6D6D6974 5F74696D65txt "invalid_commit_time"
0E00F 0A C6000000 CB00 0000map leaf, size 10: @C6 → @CB
0EA6C 6F6666736574txt "offset"
0F100nil
0F20F 0A EA000000 F100 0000map leaf, size 10: @EA → @F1
0FC07 1E 51620000 2000 0000 97000000 AB00 0000 BC000000 E000 0000 F2000000map branch, size 30, depth 0 (root), slots 0, 4, 6, 9, 13, 14: @20 → @97 → @AB → @BC → @E0 → @F2

Refuse an invalid query definition

definition_text holds this document:

TRON43 B
Offset (hex)Bytes (hex)Meaning
0054 52 4F 4Emagic TRON
042C 3F78txt "?x"
070E 0D 00 0100 010000 00 04000000array leaf, size 13, shift 0, bitmap 0001, count 1 (root): @4
144C 66696E64txt "find"
190F 0A 14000000 0700 0000map leaf, size 10: @14 → @7
c496 B
stardust_document *definition = NULL;
uint32_t status = stardust_parse(definition_text, STARDUST_TRON, &definition);
if (status != STARDUST_OK) {stardust_document_release(definition); return status;}
stardust_db_source source = {.kind = STARDUST_SOURCE_DOCUMENT, .document = definition};
stardust_db_query *failed = NULL;
status = stardust_db_query_open(db, &source, &failed);
stardust_document_release(definition);
stardust_diagnostic_view result = {0};
stardust_db_query_error(failed, &result);
TRON231 B
Offset (hex)Bytes (hex)Meaning
0054 52 4F 4Emagic TRON
046C 737461747573txt "status"
0B14 12 696E76616C69 645F646566696E69 74696F6Etxt "invalid_definition"
1F0F 0A 04000000 0B00 0000map leaf, size 10: @4 → @B
296C 656E74697479txt "entity"
3000nil
310F 0A 29000000 3000 0000map leaf, size 10: @29 → @30
3B7C 6D657373616765txt "message"
4314 10 556E626F756E 645F566172696162 6C65txt "Unbound_Variable"
550F 0A 3B000000 4300 0000map leaf, size 10: @3B → @43
5F07 0E 08020000 3100 0000 55000000map branch, size 14, depth 1, slots 3, 9: @31 → @55
6D4C 70617468txt "path"
7200nil
730F 0A 6D000000 7200 0000map leaf, size 10: @6D → @72
7D5C 6669656C64txt "field"
8300nil
840F 0A 7D000000 8300 0000map leaf, size 10: @7D → @83
8E4C 636F6465txt "code"
9314 10 756E626F756E 645F766172696162 6C65txt "unbound_variable"
A50F 0A 8E000000 9300 0000map leaf, size 10: @8E → @93
AF6C 6F6666736574txt "offset"
B600nil
B70F 0A AF000000 B600 0000map leaf, size 10: @AF → @B6
C107 1E 51620000 1F00 0000 5F000000 7300 0000 84000000 A500 0000 B7000000map branch, size 30, depth 0 (root), slots 0, 4, 6, 9, 13, 14: @1F → @5F → @73 → @84 → @A5 → @B7

Report a missing stored query

c287 B
stardust_db_source source = {.kind = STARDUST_SOURCE_PATH, .path = {(const uint8_t *)"people/missing", 14}};
stardust_db_query *failed = NULL;
uint32_t status = stardust_db_query_open(db, &source, &failed);
stardust_diagnostic_view result = {0};
stardust_db_query_error(failed, &result);
TRON237 B
Offset (hex)Bytes (hex)Meaning
0054 52 4F 4Emagic TRON
046C 737461747573txt "status"
0B9C 6E6F745F666F75 6E64txt "not_found"
150F 0A 04000000 0B00 0000map leaf, size 10: @4 → @B
1F6C 656E74697479txt "entity"
2600nil
270F 0A 1F000000 2600 0000map leaf, size 10: @1F → @26
317C 6D657373616765txt "message"
3914 1A 6E6F20646566 696E6974696F6E20 6174207468697320 70617468txt "no definition at this pa…"
550F 0A 31000000 3900 0000map leaf, size 10: @31 → @39
5F07 0E 08020000 2700 0000 55000000map branch, size 14, depth 1, slots 3, 9: @27 → @55
6D4C 70617468txt "path"
72EC 70656F706C652F 6D697373696E67txt "people/missing"
810F 0A 6D000000 7200 0000map leaf, size 10: @6D → @72
8B5C 6669656C64txt "field"
9100nil
920F 0A 8B000000 9100 0000map leaf, size 10: @8B → @91
9C4C 636F6465txt "code"
A19C 6E6F745F666F75 6E64txt "not_found"
AB0F 0A 9C000000 A100 0000map leaf, size 10: @9C → @A1
B56C 6F6666736574txt "offset"
BC00nil
BD0F 0A B5000000 BC00 0000map leaf, size 10: @B5 → @BC
C707 1E 51620000 1500 0000 5F000000 8100 0000 92000000 AB00 0000 BD000000map branch, size 30, depth 0 (root), slots 0, 4, 6, 9, 13, 14: @15 → @5F → @81 → @92 → @AB → @BD

Report a malformed byte at offset zero

malformed_text holds these bytes:

text1 B
]
c188 B
stardust_document *failed = NULL;
uint32_t status = stardust_parse(malformed_text, STARDUST_DUST, &failed);
stardust_diagnostic_view result = {0};
stardust_document_error(failed, &result);
TRON242 B
Offset (hex)Bytes (hex)Meaning
0054 52 4F 4Emagic TRON
046C 737461747573txt "status"
0B14 10 696E76616C69 645F617267756D65 6E74txt "invalid_argument"
1D0F 0A 04000000 0B00 0000map leaf, size 10: @4 → @B
276C 656E74697479txt "entity"
2E00nil
2F0F 0A 27000000 2E00 0000map leaf, size 10: @27 → @2E
397C 6D657373616765txt "message"
4114 1A 496E76616C69 645F53796E746178 206174206F666673 65742030txt "Invalid_Syntax at offset…"
5D0F 0A 39000000 4100 0000map leaf, size 10: @39 → @41
6707 0E 08020000 2F00 0000 5D000000map branch, size 14, depth 1, slots 3, 9: @2F → @5D
754C 70617468txt "path"
7A00nil
7B0F 0A 75000000 7A00 0000map leaf, size 10: @75 → @7A
855C 6669656C64txt "field"
8B00nil
8C0F 0A 85000000 8B00 0000map leaf, size 10: @85 → @8B
964C 636F6465txt "code"
9BCC 696E76616C6964 5F64757374txt "invalid_dust"
A80F 0A 96000000 9B00 0000map leaf, size 10: @96 → @9B
B26C 6F6666736574txt "offset"
B902 00000000000000 00i64 0
C20F 0A B2000000 B900 0000map leaf, size 10: @B2 → @B9
CC07 1E 51620000 1D00 0000 67000000 7B00 0000 8C000000 A800 0000 C2000000map branch, size 30, depth 0 (root), slots 0, 4, 6, 9, 13, 14: @1D → @67 → @7B → @8C → @A8 → @C2

Report malformed DUST

malformed_text holds these bytes:

text1 B
[
c188 B
stardust_document *failed = NULL;
uint32_t status = stardust_parse(malformed_text, STARDUST_DUST, &failed);
stardust_diagnostic_view result = {0};
stardust_document_error(failed, &result);
TRON242 B
Offset (hex)Bytes (hex)Meaning
0054 52 4F 4Emagic TRON
046C 737461747573txt "status"
0B14 10 696E76616C69 645F617267756D65 6E74txt "invalid_argument"
1D0F 0A 04000000 0B00 0000map leaf, size 10: @4 → @B
276C 656E74697479txt "entity"
2E00nil
2F0F 0A 27000000 2E00 0000map leaf, size 10: @27 → @2E
397C 6D657373616765txt "message"
4114 1A 556E65787065 637465645F456E64 206174206F666673 65742032txt "Unexpected_End at offset…"
5D0F 0A 39000000 4100 0000map leaf, size 10: @39 → @41
6707 0E 08020000 2F00 0000 5D000000map branch, size 14, depth 1, slots 3, 9: @2F → @5D
754C 70617468txt "path"
7A00nil
7B0F 0A 75000000 7A00 0000map leaf, size 10: @75 → @7A
855C 6669656C64txt "field"
8B00nil
8C0F 0A 85000000 8B00 0000map leaf, size 10: @85 → @8B
964C 636F6465txt "code"
9BCC 696E76616C6964 5F64757374txt "invalid_dust"
A80F 0A 96000000 9B00 0000map leaf, size 10: @96 → @9B
B26C 6F6666736574txt "offset"
B902 02000000000000 00i64 2
C20F 0A B2000000 B900 0000map leaf, size 10: @B2 → @B9
CC07 1E 51620000 1D00 0000 67000000 7B00 0000 8C000000 A800 0000 C2000000map branch, size 30, depth 0 (root), slots 0, 4, 6, 9, 13, 14: @1D → @67 → @7B → @8C → @A8 → @C2