These operations construct a document one node at a time.
For most operations, parse a document in your selected format.
Use these operations only when you cannot parse the document from text.
Create a builder.
Add the nodes in preorder.
Seal the builder to create an owned document.
odin 67 B
builder : : proc ( allocator : = context . allocator ) -> ( Builder , Error )
Add nodes in depth-first preorder. An append failure makes the builder unusable.
odin 329 B
builder : = stardust. builder ( ) or_return
defer stardust. close ( & builder)
object : = stardust. add ( & builder, { parent = stardust. NO_NODE , kind = . Object } ) or_return
stardust. add ( & builder, { parent = object, kind = . Number , key = "x" , number = i64 ( 41 ) } ) or_return
result : = stardust. seal ( builder) or_return
defer stardust. close ( & result)
TRON33 B
Offset (hex) Bytes (hex) Meaning 00 54 52 4F 4E magic TRON 04 1C 78 txt "x" 06 02 29000000000000
00 i64 41 0F 0F 0A 04000000 0600
0000 map leaf, size 10: @4 → @6
C exports: stardust_document_builder_create
odin 96 B
add : : proc ( builder: ^ Builder , node: Node_Input , allocator : = context . allocator ) -> ( u32 , Error )
Requires exclusive use of the receiver handle.
The root has no parent. Each later parent must be an open container or one of its ancestors.
odin 329 B
builder : = stardust. builder ( ) or_return
defer stardust. close ( & builder)
object : = stardust. add ( & builder, { parent = stardust. NO_NODE , kind = . Object } ) or_return
stardust. add ( & builder, { parent = object, kind = . Number , key = "x" , number = i64 ( 41 ) } ) or_return
result : = stardust. seal ( builder) or_return
defer stardust. close ( & result)
TRON33 B
Offset (hex) Bytes (hex) Meaning 00 54 52 4F 4E magic TRON 04 1C 78 txt "x" 06 02 29000000000000
00 i64 41 0F 0F 0A 04000000 0600
0000 map leaf, size 10: @4 → @6
odin 217 B
input : = stardust. Node_Input { parent = stardust. NO_NODE , kind = . Number , number = i64 ( 41 ) }
builder : = stardust. builder ( ) or_return
defer stardust. close ( & builder)
stardust. add ( & builder, input) or_return
result : = input
TRON158 B
Offset (hex) Bytes (hex) Meaning 00 54 52 4F 4E magic TRON 04 3C 6B6579 txt "key" 08 0C txt "" 09 0F 0A 04000000 0800
0000 map leaf, size 10: @4 → @8 13 4C 6B696E64 txt "kind" 18 6C 6E756D626572 txt "number" 1F 0F 0A 13000000 1800
0000 map leaf, size 10: @13 → @18 29 6C 6E756D626572 txt "number" 30 02 29000000000000
00 i64 41 39 0F 0A 29000000 3000
0000 map leaf, size 10: @29 → @30 43 6C 706172656E74 txt "parent" 4A 00 nil 4B 0F 0A 43000000 4A00
0000 map leaf, size 10: @43 → @4A 55 4C 74657874 txt "text" 5A 0C txt "" 5B 0F 0A 55000000 5A00
0000 map leaf, size 10: @55 → @5A 65 7C 626F6F6C65616E txt "boolean" 6D 01 bit false 6E 0F 0A 65000000 6D00
0000 map leaf, size 10: @65 → @6D 78 07 1E A1190000 0900
0000 1F000000 3900
0000 4B000000 5B00
0000 6E000000 map branch, size 30, depth 0 (root), slots 0, 5, 7, 8, 11, 12: @9 → @1F → @39 → @4B → @5B → @6E
C exports: stardust_document_builder_add_many , stardust_document_builder_error
odin 97 B
add_many : : proc ( builder: ^ Builder , nodes: [ ] Node_Input , allocator : = context . allocator ) -> Error
Requires exclusive use of the receiver handle.
odin 299 B
builder : = stardust. builder ( ) or_return
defer stardust. close ( & builder)
stardust. add_many ( & builder, {
{ parent = stardust. NO_NODE , kind = . Object } ,
{ parent = 0 , kind = . Number , key = "x" , number = i64 ( 41 ) } ,
} ) or_return
result : = stardust. seal ( builder) or_return
defer stardust. close ( & result)
TRON33 B
Offset (hex) Bytes (hex) Meaning 00 54 52 4F 4E magic TRON 04 1C 78 txt "x" 06 02 29000000000000
00 i64 41 0F 0F 0A 04000000 0600
0000 map leaf, size 10: @4 → @6
C exports: stardust_document_builder_add_many , stardust_document_builder_error
odin 83 B
seal : : proc ( builder: Builder , allocator : = context . allocator ) -> ( Document , Error )
Requires exclusive use of the receiver handle.
The builder accepts no more nodes after sealing.
odin 329 B
builder : = stardust. builder ( ) or_return
defer stardust. close ( & builder)
object : = stardust. add ( & builder, { parent = stardust. NO_NODE , kind = . Object } ) or_return
stardust. add ( & builder, { parent = object, kind = . Number , key = "x" , number = i64 ( 41 ) } ) or_return
result : = stardust. seal ( builder) or_return
defer stardust. close ( & result)
TRON33 B
Offset (hex) Bytes (hex) Meaning 00 54 52 4F 4E magic TRON 04 1C 78 txt "x" 06 02 29000000000000
00 i64 41 0F 0F 0A 04000000 0600
0000 map leaf, size 10: @4 → @6
C exports: stardust_document_builder_seal , stardust_document_builder_error
odin 32 B
close : : proc ( builder: ^ Builder )
Consumes the receiver handle.
input_text holds this document:
TRON33 B
Offset (hex) Bytes (hex) Meaning 00 54 52 4F 4E magic TRON 04 1C 78 txt "x" 06 02 29000000000000
00 i64 41 0F 0F 0A 04000000 0600
0000 map leaf, size 10: @4 → @6
odin 149 B
builder : = stardust. builder ( ) or_return
stardust. close ( & builder)
result : = stardust. parse ( input_text, . TRON ) or_return
defer stardust. close ( & result)
TRON33 B
Offset (hex) Bytes (hex) Meaning 00 54 52 4F 4E magic TRON 04 1C 78 txt "x" 06 02 29000000000000
00 i64 41 0F 0F 0A 04000000 0600
0000 map leaf, size 10: @4 → @6
C exports: stardust_document_builder_release