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.
clojure 2 B
[]
clojure 9 B
[options]
Add nodes in depth-first preorder. An append failure makes the builder unusable.
clojure 176 B
(with-open [builder (sd/builder )]
(let [object (sd/add builder {:kind :object })]
(sd/add builder {:parent object :kind :number :key "x" :number 41 }))
(sd/seal builder))
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
clojure 14 B
[builder node]
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.
clojure 176 B
(with-open [builder (sd/builder )]
(let [object (sd/add builder {:kind :object })]
(sd/add builder {:parent object :kind :number :key "x" :number 41 }))
(sd/seal builder))
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
clojure 156 B
(let [input {:parent nil :kind :number :number 41 :boolean false :key "" :text "" }]
(with-open [builder (sd/builder )]
(sd/add builder input))
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
clojure 15 B
[builder nodes]
Requires exclusive use of the receiver handle.
clojure 142 B
(with-open [builder (sd/builder )]
(sd/add-many builder [{:kind :object } {:parent 0 :kind :number :key "x" :number 41 }])
(sd/seal builder))
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
clojure 9 B
[builder]
Requires exclusive use of the receiver handle.
The builder accepts no more nodes after sealing.
clojure 176 B
(with-open [builder (sd/builder )]
(let [object (sd/add builder {:kind :object })]
(sd/add builder {:parent object :kind :number :key "x" :number 41 }))
(sd/seal builder))
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
clojure 8 B
[handle]
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
clojure 79 B
(let [builder (sd/builder )]
(sd/close builder)
(sd/parse input-text :tron ))
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