automerge-rb 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (481) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +22 -0
  3. data/README.md +175 -0
  4. data/ext/automerge_ext/automerge_ext.c +1805 -0
  5. data/ext/automerge_ext/extconf.rb +132 -0
  6. data/lib/automerge/version.rb +6 -0
  7. data/lib/automerge.rb +110 -0
  8. data/rust-toolchain.toml +4 -0
  9. data/vendor/automerge-rust/Cargo.lock +1909 -0
  10. data/vendor/automerge-rust/Cargo.toml +15 -0
  11. data/vendor/automerge-rust/automerge/Cargo.toml +78 -0
  12. data/vendor/automerge-rust/automerge/README.md +5 -0
  13. data/vendor/automerge-rust/automerge/benches/load_save.rs +102 -0
  14. data/vendor/automerge-rust/automerge/benches/map.rs +260 -0
  15. data/vendor/automerge-rust/automerge/benches/range.rs +37 -0
  16. data/vendor/automerge-rust/automerge/benches/sync.rs +95 -0
  17. data/vendor/automerge-rust/automerge/examples/README.md +7 -0
  18. data/vendor/automerge-rust/automerge/examples/quickstart.rs +57 -0
  19. data/vendor/automerge-rust/automerge/examples/watch.rs +94 -0
  20. data/vendor/automerge-rust/automerge/fuzz/Cargo.toml +29 -0
  21. data/vendor/automerge-rust/automerge/fuzz/fuzz_targets/load.rs +37 -0
  22. data/vendor/automerge-rust/automerge/src/autocommit.rs +1286 -0
  23. data/vendor/automerge-rust/automerge/src/automerge/current_state.rs +546 -0
  24. data/vendor/automerge-rust/automerge/src/automerge/tests.rs +2023 -0
  25. data/vendor/automerge-rust/automerge/src/automerge.rs +2071 -0
  26. data/vendor/automerge-rust/automerge/src/autoserde.rs +128 -0
  27. data/vendor/automerge-rust/automerge/src/change.rs +357 -0
  28. data/vendor/automerge-rust/automerge/src/change_graph.rs +1215 -0
  29. data/vendor/automerge-rust/automerge/src/change_queue.rs +46 -0
  30. data/vendor/automerge-rust/automerge/src/clock.rs +206 -0
  31. data/vendor/automerge-rust/automerge/src/columnar/column_range/boolean.rs +83 -0
  32. data/vendor/automerge-rust/automerge/src/columnar/column_range/delta.rs +148 -0
  33. data/vendor/automerge-rust/automerge/src/columnar/column_range/generic/group.rs +138 -0
  34. data/vendor/automerge-rust/automerge/src/columnar/column_range/generic/simple.rs +76 -0
  35. data/vendor/automerge-rust/automerge/src/columnar/column_range/generic.rs +93 -0
  36. data/vendor/automerge-rust/automerge/src/columnar/column_range/key.rs +272 -0
  37. data/vendor/automerge-rust/automerge/src/columnar/column_range/obj_id.rs +202 -0
  38. data/vendor/automerge-rust/automerge/src/columnar/column_range/opid_list.rs +329 -0
  39. data/vendor/automerge-rust/automerge/src/columnar/column_range/raw.rs +38 -0
  40. data/vendor/automerge-rust/automerge/src/columnar/column_range/rle.rs +216 -0
  41. data/vendor/automerge-rust/automerge/src/columnar/column_range/value.rs +547 -0
  42. data/vendor/automerge-rust/automerge/src/columnar/column_range.rs +17 -0
  43. data/vendor/automerge-rust/automerge/src/columnar/encoding/boolean.rs +197 -0
  44. data/vendor/automerge-rust/automerge/src/columnar/encoding/col_error.rs +88 -0
  45. data/vendor/automerge-rust/automerge/src/columnar/encoding/column_decoder.rs +133 -0
  46. data/vendor/automerge-rust/automerge/src/columnar/encoding/decodable_impls.rs +175 -0
  47. data/vendor/automerge-rust/automerge/src/columnar/encoding/delta.rs +96 -0
  48. data/vendor/automerge-rust/automerge/src/columnar/encoding/encodable_impls.rs +200 -0
  49. data/vendor/automerge-rust/automerge/src/columnar/encoding/leb128.rs +82 -0
  50. data/vendor/automerge-rust/automerge/src/columnar/encoding/properties.rs +178 -0
  51. data/vendor/automerge-rust/automerge/src/columnar/encoding/raw.rs +101 -0
  52. data/vendor/automerge-rust/automerge/src/columnar/encoding/rle.rs +239 -0
  53. data/vendor/automerge-rust/automerge/src/columnar/encoding.rs +67 -0
  54. data/vendor/automerge-rust/automerge/src/columnar/splice_error.rs +47 -0
  55. data/vendor/automerge-rust/automerge/src/columnar.rs +14 -0
  56. data/vendor/automerge-rust/automerge/src/convert.rs +112 -0
  57. data/vendor/automerge-rust/automerge/src/cursor.rs +296 -0
  58. data/vendor/automerge-rust/automerge/src/decoding.rs +475 -0
  59. data/vendor/automerge-rust/automerge/src/error.rs +159 -0
  60. data/vendor/automerge-rust/automerge/src/exid.rs +238 -0
  61. data/vendor/automerge-rust/automerge/src/hydrate/list.rs +140 -0
  62. data/vendor/automerge-rust/automerge/src/hydrate/map.rs +132 -0
  63. data/vendor/automerge-rust/automerge/src/hydrate/tests.rs +40 -0
  64. data/vendor/automerge-rust/automerge/src/hydrate/text.rs +89 -0
  65. data/vendor/automerge-rust/automerge/src/hydrate.rs +368 -0
  66. data/vendor/automerge-rust/automerge/src/indexed_cache.rs +113 -0
  67. data/vendor/automerge-rust/automerge/src/iter/doc.rs +603 -0
  68. data/vendor/automerge-rust/automerge/src/iter/keys.rs +93 -0
  69. data/vendor/automerge-rust/automerge/src/iter/list_range.rs +433 -0
  70. data/vendor/automerge-rust/automerge/src/iter/map_range.rs +316 -0
  71. data/vendor/automerge-rust/automerge/src/iter/spans.rs +601 -0
  72. data/vendor/automerge-rust/automerge/src/iter/tools.rs +427 -0
  73. data/vendor/automerge-rust/automerge/src/iter/values.rs +36 -0
  74. data/vendor/automerge-rust/automerge/src/iter.rs +25 -0
  75. data/vendor/automerge-rust/automerge/src/legacy/mod.rs +364 -0
  76. data/vendor/automerge-rust/automerge/src/legacy/serde_impls/actor_id.rs +25 -0
  77. data/vendor/automerge-rust/automerge/src/legacy/serde_impls/change_hash.rs +29 -0
  78. data/vendor/automerge-rust/automerge/src/legacy/serde_impls/element_id.rs +27 -0
  79. data/vendor/automerge-rust/automerge/src/legacy/serde_impls/mod.rs +31 -0
  80. data/vendor/automerge-rust/automerge/src/legacy/serde_impls/object_id.rs +36 -0
  81. data/vendor/automerge-rust/automerge/src/legacy/serde_impls/op.rs +668 -0
  82. data/vendor/automerge-rust/automerge/src/legacy/serde_impls/op_type.rs +26 -0
  83. data/vendor/automerge-rust/automerge/src/legacy/serde_impls/opid.rs +25 -0
  84. data/vendor/automerge-rust/automerge/src/legacy/serde_impls/scalar_value.rs +63 -0
  85. data/vendor/automerge-rust/automerge/src/legacy/utility_impls/element_id.rs +66 -0
  86. data/vendor/automerge-rust/automerge/src/legacy/utility_impls/key.rs +49 -0
  87. data/vendor/automerge-rust/automerge/src/legacy/utility_impls/mod.rs +4 -0
  88. data/vendor/automerge-rust/automerge/src/legacy/utility_impls/object_id.rs +74 -0
  89. data/vendor/automerge-rust/automerge/src/legacy/utility_impls/opid.rs +68 -0
  90. data/vendor/automerge-rust/automerge/src/lib.rs +315 -0
  91. data/vendor/automerge-rust/automerge/src/marks.rs +478 -0
  92. data/vendor/automerge-rust/automerge/src/op_set2/change/batch.rs +2002 -0
  93. data/vendor/automerge-rust/automerge/src/op_set2/change/collector.rs +974 -0
  94. data/vendor/automerge-rust/automerge/src/op_set2/change.rs +332 -0
  95. data/vendor/automerge-rust/automerge/src/op_set2/columns.rs +714 -0
  96. data/vendor/automerge-rust/automerge/src/op_set2/meta.rs +174 -0
  97. data/vendor/automerge-rust/automerge/src/op_set2/op.rs +1363 -0
  98. data/vendor/automerge-rust/automerge/src/op_set2/op_set/elems.rs +43 -0
  99. data/vendor/automerge-rust/automerge/src/op_set2/op_set/found_op.rs +60 -0
  100. data/vendor/automerge-rust/automerge/src/op_set2/op_set/index.rs +197 -0
  101. data/vendor/automerge-rust/automerge/src/op_set2/op_set/insert.rs +179 -0
  102. data/vendor/automerge-rust/automerge/src/op_set2/op_set/mark_index.rs +292 -0
  103. data/vendor/automerge-rust/automerge/src/op_set2/op_set/marks.rs +86 -0
  104. data/vendor/automerge-rust/automerge/src/op_set2/op_set/op_iter.rs +1295 -0
  105. data/vendor/automerge-rust/automerge/src/op_set2/op_set/op_query.rs +82 -0
  106. data/vendor/automerge-rust/automerge/src/op_set2/op_set/top_op.rs +50 -0
  107. data/vendor/automerge-rust/automerge/src/op_set2/op_set/visible.rs +290 -0
  108. data/vendor/automerge-rust/automerge/src/op_set2/op_set.rs +1793 -0
  109. data/vendor/automerge-rust/automerge/src/op_set2/parents.rs +133 -0
  110. data/vendor/automerge-rust/automerge/src/op_set2/skip_list.rs +714 -0
  111. data/vendor/automerge-rust/automerge/src/op_set2/types.rs +769 -0
  112. data/vendor/automerge-rust/automerge/src/op_set2.rs +18 -0
  113. data/vendor/automerge-rust/automerge/src/patches/patch.rs +95 -0
  114. data/vendor/automerge-rust/automerge/src/patches/patch_builder.rs +382 -0
  115. data/vendor/automerge-rust/automerge/src/patches/patch_log.rs +584 -0
  116. data/vendor/automerge-rust/automerge/src/patches.rs +7 -0
  117. data/vendor/automerge-rust/automerge/src/query/list_state.rs +230 -0
  118. data/vendor/automerge-rust/automerge/src/query/seek_mark.rs +142 -0
  119. data/vendor/automerge-rust/automerge/src/read.rs +326 -0
  120. data/vendor/automerge-rust/automerge/src/sequence_tree.rs +662 -0
  121. data/vendor/automerge-rust/automerge/src/storage/bundle/builder.rs +942 -0
  122. data/vendor/automerge-rust/automerge/src/storage/bundle/error.rs +42 -0
  123. data/vendor/automerge-rust/automerge/src/storage/bundle/meta.rs +23 -0
  124. data/vendor/automerge-rust/automerge/src/storage/bundle/storage.rs +146 -0
  125. data/vendor/automerge-rust/automerge/src/storage/bundle.rs +210 -0
  126. data/vendor/automerge-rust/automerge/src/storage/change/change_actors.rs +311 -0
  127. data/vendor/automerge-rust/automerge/src/storage/change/change_op_columns.rs +621 -0
  128. data/vendor/automerge-rust/automerge/src/storage/change/compressed.rs +51 -0
  129. data/vendor/automerge-rust/automerge/src/storage/change/op_with_change_actors.rs +1 -0
  130. data/vendor/automerge-rust/automerge/src/storage/change.rs +523 -0
  131. data/vendor/automerge-rust/automerge/src/storage/chunk.rs +312 -0
  132. data/vendor/automerge-rust/automerge/src/storage/columns/column.rs +42 -0
  133. data/vendor/automerge-rust/automerge/src/storage/columns/column_builder.rs +199 -0
  134. data/vendor/automerge-rust/automerge/src/storage/columns/column_specification.rs +340 -0
  135. data/vendor/automerge-rust/automerge/src/storage/columns/raw_column.rs +286 -0
  136. data/vendor/automerge-rust/automerge/src/storage/columns.rs +355 -0
  137. data/vendor/automerge-rust/automerge/src/storage/document/compression.rs +362 -0
  138. data/vendor/automerge-rust/automerge/src/storage/document.rs +411 -0
  139. data/vendor/automerge-rust/automerge/src/storage/load/change_collector.rs +15 -0
  140. data/vendor/automerge-rust/automerge/src/storage/load.rs +136 -0
  141. data/vendor/automerge-rust/automerge/src/storage/parse/leb128.rs +302 -0
  142. data/vendor/automerge-rust/automerge/src/storage/parse.rs +619 -0
  143. data/vendor/automerge-rust/automerge/src/storage/save/document.rs +27 -0
  144. data/vendor/automerge-rust/automerge/src/storage.rs +26 -0
  145. data/vendor/automerge-rust/automerge/src/sync/bloom.rs +161 -0
  146. data/vendor/automerge-rust/automerge/src/sync/message_builder.rs +118 -0
  147. data/vendor/automerge-rust/automerge/src/sync/state.rs +214 -0
  148. data/vendor/automerge-rust/automerge/src/sync/v1_compat_test/bloom.rs +162 -0
  149. data/vendor/automerge-rust/automerge/src/sync/v1_compat_test/mod.rs +625 -0
  150. data/vendor/automerge-rust/automerge/src/sync/v1_compat_test/state.rs +120 -0
  151. data/vendor/automerge-rust/automerge/src/sync.rs +2482 -0
  152. data/vendor/automerge-rust/automerge/src/text_diff/LICENSE +201 -0
  153. data/vendor/automerge-rust/automerge/src/text_diff/myers.rs +332 -0
  154. data/vendor/automerge-rust/automerge/src/text_diff/replace.rs +139 -0
  155. data/vendor/automerge-rust/automerge/src/text_diff/utils.rs +119 -0
  156. data/vendor/automerge-rust/automerge/src/text_diff.rs +515 -0
  157. data/vendor/automerge-rust/automerge/src/text_value.rs +276 -0
  158. data/vendor/automerge-rust/automerge/src/transaction/commit.rs +34 -0
  159. data/vendor/automerge-rust/automerge/src/transaction/inner.rs +1403 -0
  160. data/vendor/automerge-rust/automerge/src/transaction/manual_transaction.rs +147 -0
  161. data/vendor/automerge-rust/automerge/src/transaction/owned_transaction.rs +266 -0
  162. data/vendor/automerge-rust/automerge/src/transaction/result.rs +21 -0
  163. data/vendor/automerge-rust/automerge/src/transaction/transactable.rs +203 -0
  164. data/vendor/automerge-rust/automerge/src/transaction.rs +513 -0
  165. data/vendor/automerge-rust/automerge/src/types.rs +749 -0
  166. data/vendor/automerge-rust/automerge/src/validation.rs +29 -0
  167. data/vendor/automerge-rust/automerge/src/value.rs +763 -0
  168. data/vendor/automerge-rust/automerge/tests/batch_insert.rs +1034 -0
  169. data/vendor/automerge-rust/automerge/tests/block_tests.rs +887 -0
  170. data/vendor/automerge-rust/automerge/tests/convert_string_to_text.rs +72 -0
  171. data/vendor/automerge-rust/automerge/tests/diff_marks.rs +1508 -0
  172. data/vendor/automerge-rust/automerge/tests/fixtures/64bit_obj_id_change.automerge +0 -0
  173. data/vendor/automerge-rust/automerge/tests/fixtures/64bit_obj_id_doc.automerge +0 -0
  174. data/vendor/automerge-rust/automerge/tests/fixtures/counter_value_has_incorrect_meta.automerge +0 -0
  175. data/vendor/automerge-rust/automerge/tests/fixtures/counter_value_is_ok.automerge +0 -0
  176. data/vendor/automerge-rust/automerge/tests/fixtures/counter_value_is_overlong.automerge +0 -0
  177. data/vendor/automerge-rust/automerge/tests/fixtures/two_change_chunks.automerge +0 -0
  178. data/vendor/automerge-rust/automerge/tests/fixtures/two_change_chunks_compressed.automerge +0 -0
  179. data/vendor/automerge-rust/automerge/tests/fixtures/two_change_chunks_out_of_order.automerge +0 -0
  180. data/vendor/automerge-rust/automerge/tests/fuzz-crashers/action-is-48.automerge +0 -0
  181. data/vendor/automerge-rust/automerge/tests/fuzz-crashers/crash-da39a3ee5e6b4b0d3255bfef95601890afd80709 +0 -0
  182. data/vendor/automerge-rust/automerge/tests/fuzz-crashers/incorrect_max_op.automerge +0 -0
  183. data/vendor/automerge-rust/automerge/tests/fuzz-crashers/invalid_deflate_stream.automerge +0 -0
  184. data/vendor/automerge-rust/automerge/tests/fuzz-crashers/missing_actor.automerge +0 -0
  185. data/vendor/automerge-rust/automerge/tests/fuzz-crashers/overflow_in_length.automerge +0 -0
  186. data/vendor/automerge-rust/automerge/tests/fuzz-crashers/too_many_deps.automerge +0 -0
  187. data/vendor/automerge-rust/automerge/tests/fuzz-crashers/too_many_ops.automerge +0 -0
  188. data/vendor/automerge-rust/automerge/tests/test.rs +2668 -0
  189. data/vendor/automerge-rust/automerge/tests/test_mark_patches.rs +41 -0
  190. data/vendor/automerge-rust/automerge/tests/test_save_load_orphans.rs +84 -0
  191. data/vendor/automerge-rust/automerge/tests/text.rs +1098 -0
  192. data/vendor/automerge-rust/automerge/tests/text_encoding.rs +640 -0
  193. data/vendor/automerge-rust/automerge-c/CMakeLists.txt +439 -0
  194. data/vendor/automerge-rust/automerge-c/Cargo.toml +22 -0
  195. data/vendor/automerge-rust/automerge-c/README.md +233 -0
  196. data/vendor/automerge-rust/automerge-c/build.rs +21 -0
  197. data/vendor/automerge-rust/automerge-c/cbindgen.toml +48 -0
  198. data/vendor/automerge-rust/automerge-c/cmake/Cargo.toml.in +22 -0
  199. data/vendor/automerge-rust/automerge-c/cmake/automerge-c-config.cmake.in +99 -0
  200. data/vendor/automerge-rust/automerge-c/cmake/cbindgen.toml.in +48 -0
  201. data/vendor/automerge-rust/automerge-c/cmake/config.h.in +58 -0
  202. data/vendor/automerge-rust/automerge-c/cmake/enum-string-functions-gen.cmake +183 -0
  203. data/vendor/automerge-rust/automerge-c/cmake/file-regex-replace.cmake +33 -0
  204. data/vendor/automerge-rust/automerge-c/cmake/file-touch.cmake +35 -0
  205. data/vendor/automerge-rust/automerge-c/docs/CMakeLists.txt +39 -0
  206. data/vendor/automerge-rust/automerge-c/docs/img/brandmark.png +0 -0
  207. data/vendor/automerge-rust/automerge-c/examples/CMakeLists.txt +42 -0
  208. data/vendor/automerge-rust/automerge-c/examples/README.md +9 -0
  209. data/vendor/automerge-rust/automerge-c/examples/quickstart.c +131 -0
  210. data/vendor/automerge-rust/automerge-c/include/automerge-c/utils/result.h +30 -0
  211. data/vendor/automerge-rust/automerge-c/include/automerge-c/utils/stack.h +130 -0
  212. data/vendor/automerge-rust/automerge-c/include/automerge-c/utils/stack_callback_data.h +53 -0
  213. data/vendor/automerge-rust/automerge-c/include/automerge-c/utils/string.h +29 -0
  214. data/vendor/automerge-rust/automerge-c/src/actor_id.rs +193 -0
  215. data/vendor/automerge-rust/automerge-c/src/byte_span.rs +227 -0
  216. data/vendor/automerge-rust/automerge-c/src/change.rs +356 -0
  217. data/vendor/automerge-rust/automerge-c/src/cursor.rs +168 -0
  218. data/vendor/automerge-rust/automerge-c/src/doc/list.rs +636 -0
  219. data/vendor/automerge-rust/automerge-c/src/doc/map.rs +556 -0
  220. data/vendor/automerge-rust/automerge-c/src/doc/mark.rs +296 -0
  221. data/vendor/automerge-rust/automerge-c/src/doc/utils.rs +46 -0
  222. data/vendor/automerge-rust/automerge-c/src/doc.rs +1009 -0
  223. data/vendor/automerge-rust/automerge-c/src/index.rs +84 -0
  224. data/vendor/automerge-rust/automerge-c/src/item.rs +2177 -0
  225. data/vendor/automerge-rust/automerge-c/src/items.rs +401 -0
  226. data/vendor/automerge-rust/automerge-c/src/lib.rs +11 -0
  227. data/vendor/automerge-rust/automerge-c/src/obj.rs +216 -0
  228. data/vendor/automerge-rust/automerge-c/src/result.rs +653 -0
  229. data/vendor/automerge-rust/automerge-c/src/sync/have.rs +42 -0
  230. data/vendor/automerge-rust/automerge-c/src/sync/message.rs +146 -0
  231. data/vendor/automerge-rust/automerge-c/src/sync/state.rs +262 -0
  232. data/vendor/automerge-rust/automerge-c/src/sync.rs +7 -0
  233. data/vendor/automerge-rust/automerge-c/src/utils/result.c +33 -0
  234. data/vendor/automerge-rust/automerge-c/src/utils/stack.c +106 -0
  235. data/vendor/automerge-rust/automerge-c/src/utils/stack_callback_data.c +9 -0
  236. data/vendor/automerge-rust/automerge-c/src/utils/string.c +46 -0
  237. data/vendor/automerge-rust/automerge-c/test/CMakeLists.txt +67 -0
  238. data/vendor/automerge-rust/automerge-c/test/actor_id_tests.c +140 -0
  239. data/vendor/automerge-rust/automerge-c/test/base_state.c +17 -0
  240. data/vendor/automerge-rust/automerge-c/test/base_state.h +39 -0
  241. data/vendor/automerge-rust/automerge-c/test/byte_span_tests.c +119 -0
  242. data/vendor/automerge-rust/automerge-c/test/cmocka_utils.c +91 -0
  243. data/vendor/automerge-rust/automerge-c/test/cmocka_utils.h +42 -0
  244. data/vendor/automerge-rust/automerge-c/test/cursor_tests.c +263 -0
  245. data/vendor/automerge-rust/automerge-c/test/doc_state.c +27 -0
  246. data/vendor/automerge-rust/automerge-c/test/doc_state.h +17 -0
  247. data/vendor/automerge-rust/automerge-c/test/doc_tests.c +335 -0
  248. data/vendor/automerge-rust/automerge-c/test/enum_string_tests.c +148 -0
  249. data/vendor/automerge-rust/automerge-c/test/files/brave-ape-49.automerge +0 -0
  250. data/vendor/automerge-rust/automerge-c/test/item_tests.c +313 -0
  251. data/vendor/automerge-rust/automerge-c/test/list_tests.c +544 -0
  252. data/vendor/automerge-rust/automerge-c/test/macro_utils.c +38 -0
  253. data/vendor/automerge-rust/automerge-c/test/macro_utils.h +23 -0
  254. data/vendor/automerge-rust/automerge-c/test/main.c +33 -0
  255. data/vendor/automerge-rust/automerge-c/test/map_tests.c +1610 -0
  256. data/vendor/automerge-rust/automerge-c/test/mark_tests.c +124 -0
  257. data/vendor/automerge-rust/automerge-c/test/ported_wasm/basic_tests.c +1642 -0
  258. data/vendor/automerge-rust/automerge-c/test/ported_wasm/cursor_tests.c +108 -0
  259. data/vendor/automerge-rust/automerge-c/test/ported_wasm/suite.c +17 -0
  260. data/vendor/automerge-rust/automerge-c/test/ported_wasm/sync_tests.c +1280 -0
  261. data/vendor/automerge-rust/automerge-c/test/str_utils.c +15 -0
  262. data/vendor/automerge-rust/automerge-c/test/str_utils.h +17 -0
  263. data/vendor/automerge-rust/automerge-test/Cargo.toml +17 -0
  264. data/vendor/automerge-rust/automerge-test/README.md +3 -0
  265. data/vendor/automerge-rust/automerge-test/src/lib.rs +487 -0
  266. data/vendor/automerge-rust/hexane/CHANGELOG.md +34 -0
  267. data/vendor/automerge-rust/hexane/Cargo.toml +47 -0
  268. data/vendor/automerge-rust/hexane/README.md +292 -0
  269. data/vendor/automerge-rust/hexane/RESULTS.txt +20 -0
  270. data/vendor/automerge-rust/hexane/TODO +18 -0
  271. data/vendor/automerge-rust/hexane/benches/insert.rs +82 -0
  272. data/vendor/automerge-rust/hexane/benches/seek.rs +77 -0
  273. data/vendor/automerge-rust/hexane/benches/splice.rs +82 -0
  274. data/vendor/automerge-rust/hexane/src/aggregate.rs +288 -0
  275. data/vendor/automerge-rust/hexane/src/boolean.rs +478 -0
  276. data/vendor/automerge-rust/hexane/src/columndata.rs +2540 -0
  277. data/vendor/automerge-rust/hexane/src/cursor.rs +756 -0
  278. data/vendor/automerge-rust/hexane/src/delta.rs +793 -0
  279. data/vendor/automerge-rust/hexane/src/encoder.rs +639 -0
  280. data/vendor/automerge-rust/hexane/src/leb128.rs +82 -0
  281. data/vendor/automerge-rust/hexane/src/lib.rs +95 -0
  282. data/vendor/automerge-rust/hexane/src/pack.rs +325 -0
  283. data/vendor/automerge-rust/hexane/src/raw.rs +314 -0
  284. data/vendor/automerge-rust/hexane/src/rle.rs +928 -0
  285. data/vendor/automerge-rust/hexane/src/slab/tree.rs +1373 -0
  286. data/vendor/automerge-rust/hexane/src/slab/writer.rs +535 -0
  287. data/vendor/automerge-rust/hexane/src/slab.rs +224 -0
  288. data/vendor/automerge-rust/hexane/src/test.rs +108 -0
  289. data/vendor/bundle/ruby/3.3.0/bin/rake +29 -0
  290. data/vendor/bundle/ruby/3.3.0/bin/rake-compiler +29 -0
  291. data/vendor/bundle/ruby/3.3.0/bin/rake-compiler-dock +29 -0
  292. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/History.rdoc +1732 -0
  293. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/Manifest.txt +32 -0
  294. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/README.rdoc +845 -0
  295. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/Rakefile +97 -0
  296. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/design_rationale.rb +54 -0
  297. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/hoe/minitest.rb +30 -0
  298. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/assertions.rb +850 -0
  299. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/autorun.rb +6 -0
  300. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/benchmark.rb +452 -0
  301. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/compress.rb +94 -0
  302. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/error_on_warning.rb +11 -0
  303. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/expectations.rb +321 -0
  304. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/hell.rb +11 -0
  305. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/manual_plugins.rb +16 -0
  306. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/mock.rb +327 -0
  307. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/parallel.rb +72 -0
  308. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/pride.rb +4 -0
  309. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/pride_plugin.rb +135 -0
  310. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/spec.rb +353 -0
  311. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/test.rb +238 -0
  312. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/test_task.rb +324 -0
  313. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/unit.rb +42 -0
  314. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest.rb +1250 -0
  315. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/metametameta.rb +150 -0
  316. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_assertions.rb +1677 -0
  317. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_benchmark.rb +137 -0
  318. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_mock.rb +1213 -0
  319. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_reporter.rb +437 -0
  320. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_spec.rb +1159 -0
  321. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_test.rb +1374 -0
  322. data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_test_task.rb +57 -0
  323. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/History.rdoc +2454 -0
  324. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/MIT-LICENSE +21 -0
  325. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/README.rdoc +155 -0
  326. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/command_line_usage.rdoc +171 -0
  327. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/Rakefile1 +38 -0
  328. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/Rakefile2 +35 -0
  329. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/a.c +6 -0
  330. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/b.c +6 -0
  331. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/main.c +11 -0
  332. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/glossary.rdoc +42 -0
  333. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/jamis.rb +592 -0
  334. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/proto_rake.rdoc +127 -0
  335. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/rake.1 +156 -0
  336. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/rakefile.rdoc +635 -0
  337. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/rational.rdoc +151 -0
  338. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/exe/rake +27 -0
  339. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/application.rb +847 -0
  340. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/backtrace.rb +25 -0
  341. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/clean.rb +78 -0
  342. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/cloneable.rb +17 -0
  343. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/cpu_counter.rb +122 -0
  344. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/default_loader.rb +15 -0
  345. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/dsl_definition.rb +196 -0
  346. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/early_time.rb +22 -0
  347. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/ext/core.rb +26 -0
  348. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/ext/string.rb +176 -0
  349. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_creation_task.rb +25 -0
  350. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_list.rb +435 -0
  351. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_task.rb +58 -0
  352. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_utils.rb +137 -0
  353. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_utils_ext.rb +135 -0
  354. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/invocation_chain.rb +57 -0
  355. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/invocation_exception_mixin.rb +17 -0
  356. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/late_time.rb +18 -0
  357. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/linked_list.rb +112 -0
  358. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/loaders/makefile.rb +54 -0
  359. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/multi_task.rb +14 -0
  360. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/name_space.rb +38 -0
  361. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/options.rb +31 -0
  362. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/packagetask.rb +222 -0
  363. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/phony.rb +16 -0
  364. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/private_reader.rb +21 -0
  365. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/promise.rb +100 -0
  366. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/pseudo_status.rb +30 -0
  367. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/rake_module.rb +67 -0
  368. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/rake_test_loader.rb +27 -0
  369. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/rule_recursion_overflow_error.rb +20 -0
  370. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/scope.rb +43 -0
  371. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/task.rb +434 -0
  372. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/task_argument_error.rb +8 -0
  373. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/task_arguments.rb +113 -0
  374. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/task_manager.rb +333 -0
  375. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/tasklib.rb +12 -0
  376. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/testtask.rb +192 -0
  377. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/thread_history_display.rb +49 -0
  378. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/thread_pool.rb +157 -0
  379. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/trace_output.rb +23 -0
  380. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/version.rb +10 -0
  381. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/win32.rb +17 -0
  382. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake.rb +69 -0
  383. data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/rake.gemspec +102 -0
  384. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/Gemfile +8 -0
  385. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/History.md +695 -0
  386. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/LICENSE.txt +20 -0
  387. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/README.md +476 -0
  388. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/Rakefile +15 -0
  389. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/appveyor.yml +22 -0
  390. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/bin/rake-compiler +24 -0
  391. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/cucumber.yml +4 -0
  392. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/compile.feature +79 -0
  393. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/cross-compile.feature +23 -0
  394. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/cross-package-multi.feature +15 -0
  395. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/cross-package.feature +14 -0
  396. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/java-compile.feature +22 -0
  397. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/java-no-native-compile.feature +33 -0
  398. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/java-package.feature +24 -0
  399. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/package.feature +40 -0
  400. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/compilation.rb +70 -0
  401. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/cross_compilation.rb +27 -0
  402. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/execution.rb +52 -0
  403. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/folders.rb +32 -0
  404. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/gem.rb +46 -0
  405. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/java_compilation.rb +7 -0
  406. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/support/env.rb +10 -0
  407. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/support/file_template_helpers.rb +137 -0
  408. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/support/generator_helpers.rb +123 -0
  409. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/support/platform_extension_helpers.rb +27 -0
  410. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/baseextensiontask.rb +90 -0
  411. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/compiler_config.rb +38 -0
  412. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/extensioncompiler.rb +51 -0
  413. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/extensiontask.rb +589 -0
  414. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/javaextensiontask.rb +321 -0
  415. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/bin/cross-ruby.rake +189 -0
  416. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/bootstrap.rake +11 -0
  417. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/common.rake +10 -0
  418. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/cucumber.rake +23 -0
  419. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/gem.rake +15 -0
  420. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/rspec.rake +9 -0
  421. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/CHANGELOG.md +446 -0
  422. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/CONTRIBUTING.md +109 -0
  423. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/Dockerfile.jruby +79 -0
  424. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/Dockerfile.mri.erb +282 -0
  425. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/Gemfile +8 -0
  426. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/LICENSE.txt +22 -0
  427. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/README.md +447 -0
  428. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/Rakefile +246 -0
  429. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/bin/rake-compiler-dock +18 -0
  430. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/buildkitd.toml +2 -0
  431. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/gem_helper.rb +54 -0
  432. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/mk_i686.rb +18 -0
  433. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/mk_musl_cross.sh +37 -0
  434. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/mk_osxcross.sh +45 -0
  435. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/mk_pkg_config.sh +24 -0
  436. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/parallel_docker_build.rb +169 -0
  437. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/patches/rake-compiler-1.3.1/0004-Enable-build-of-static-libruby.patch +38 -0
  438. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/patches/rake-compiler-1.3.1/0005-build-miniruby-first.patch +16 -0
  439. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/patches/rake-compiler-1.3.1/0006-ruby-4-rubyspec-capiext.patch +16 -0
  440. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/rcd-env.sh +6 -0
  441. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/runas +7 -0
  442. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/sigfw.c +45 -0
  443. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/strip_wrapper_codesign +17 -0
  444. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/strip_wrapper_vbox +30 -0
  445. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/sudoers +1 -0
  446. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/colors.rb +43 -0
  447. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/docker_check.rb +356 -0
  448. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/predefined_user_group.rb +5 -0
  449. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/starter.rb +206 -0
  450. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/version.rb +4 -0
  451. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock.rb +151 -0
  452. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/Dockerfile +66 -0
  453. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/README.md +14 -0
  454. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/binutils-mingw-w64-ignore-check-errors.patch +13 -0
  455. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/gcc-mingw-w64-only-c-c++.patch +13 -0
  456. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/mingw-w64-enable-ucrt.patch +22 -0
  457. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/rake-compiler-dock.gemspec +34 -0
  458. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/env/Dockerfile.alpine +17 -0
  459. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/env/Dockerfile.debian +24 -0
  460. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/fixtures/mig_test_rpc.defs +8 -0
  461. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/Gemfile +11 -0
  462. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/Rakefile +97 -0
  463. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/java/RcdTestExtService.java +19 -0
  464. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/java/RubyRcdTest.java +16 -0
  465. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/extconf.rb +111 -0
  466. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/rcd_test_ext.c +65 -0
  467. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/rcd_test_ext.h +11 -0
  468. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/lib/rcd_test.rb +6 -0
  469. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/rcd_test.gemspec +28 -0
  470. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/test/test_basic.rb +49 -0
  471. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_environment_variables.rb +108 -0
  472. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_mig.rb +18 -0
  473. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_parallel_docker_build.rb +95 -0
  474. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_rubygems_plugins.rb +12 -0
  475. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_starter.rb +158 -0
  476. data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_versions.rb +82 -0
  477. data/vendor/bundle/ruby/3.3.0/specifications/minitest-5.27.0.gemspec +32 -0
  478. data/vendor/bundle/ruby/3.3.0/specifications/rake-13.4.2.gemspec +26 -0
  479. data/vendor/bundle/ruby/3.3.0/specifications/rake-compiler-1.3.1.gemspec +33 -0
  480. data/vendor/bundle/ruby/3.3.0/specifications/rake-compiler-dock-1.12.0.gemspec +28 -0
  481. metadata +584 -0
@@ -0,0 +1,619 @@
1
+ //! A small parser combinator library inspired by [`nom`](https://docs.rs/crate/nom/5.0.0).
2
+ //!
3
+ //! The primary reason for using this rather than `nom` is that this is only a few hundred lines of
4
+ //! code because we don't need a fully fledged combinator library - automerge is a low level
5
+ //! library so it's good to avoid dependencies where we can.
6
+ //!
7
+ //! # Basic Usage
8
+ //!
9
+ //! The basic components of this library are [`Parser`]s, which parse [`Input`]s and produce
10
+ //! [`ParseResult`]s. `Input` is a combination of an `&[u8]` which is the incoming data along with
11
+ //! the position it has read up to in the data. `Parser` is a trait but has a blanket `impl` for
12
+ //! `FnMut(Input<'a>) -> ParseResult<'a, O, E>` so in practice you can think of parsers as a
13
+ //! function which takes some input and returns a result plus any remaining input. This final part
14
+ //! is encapsulated by the `ParseResult` which is a type alias for a `Result`. This means that
15
+ //! typical usage will look something like this:
16
+ //!
17
+ //! ```rust,ignore
18
+ //! use automerge::storage::parse::{ParseResult, take_1};
19
+ //! fn do_something<'a>(input: Input<'a>) -> ParseResult<'a, [u8; 3], ()> {
20
+ //! let (i, a) = take_1::<()>(input)?;
21
+ //! let (i, b) = take_1::<()>(i)?;
22
+ //! let (i, c) = take_1::<()>(i)?;
23
+ //! let result = [a, b, c];
24
+ //! Ok((i, result))
25
+ //! }
26
+ //!
27
+ //! let input = Input::new(&[b"12345"]);
28
+ //! let result = do_something(input);
29
+ //! if let Ok((_, result)) = result {
30
+ //! assert_eq!(&result, &['1', '2', '3']);
31
+ //! } else {
32
+ //! panic!();
33
+ //! }
34
+ //! ```
35
+ //!
36
+ //! Three things to note here:
37
+ //!
38
+ //! 1. The rebinding of the input (in `i`) after each call to `take_1`, this is how parser state is passed from
39
+ //! one call to the next
40
+ //! 2. We return a tuple containing the remaining input plus the result
41
+ //! 3. `take_1` has a type parameter we must pass to it representing the error type. Generally you
42
+ //! don't need to do that as type inference is often good enough.
43
+ //!
44
+ //! # Errors
45
+ //!
46
+ //! The error branch of `ParseError` is an enum containing either `ParseError::Incomplete`
47
+ //! indicating that with more input we might be able to succeed, or a `ParseError::Error`. The
48
+ //! latter branch is where parser specific errors (e.g. "this u8 is not a valid chunk type") are
49
+ //! passed. This has implications for returning and handling errors.
50
+ //!
51
+ //! ## Returning Errors
52
+ //!
53
+ //! If you want to return an error from a parser you will need to wrap the error in
54
+ //! `ParseError::Error`.
55
+ //!
56
+ //! ```rust,ignore
57
+ //! struct MyError;
58
+ //! fn my_bad_parser() -> ParseResult<(), MyError> {
59
+ //! Err(ParseError::Error(MyError))
60
+ //! }
61
+ //! ```
62
+ //!
63
+ //! ## Handling Errors
64
+ //!
65
+ //! Handling errors is generally important when you want to compose parsers with different error
66
+ //! types. In this case you will often have an error type you want to map each of the underlying
67
+ //! errors into. For this purpose you can use `ParseError::lift`
68
+ //!
69
+ //! ```rust,ignore
70
+ //! # use automerge::parse::{ParseResult, Input};
71
+ //! #[derive(thiserror::Error, Debug)]
72
+ //! #[error("this is a bad string")]
73
+ //! struct BadString;
74
+ //!
75
+ //! #[derive(thiserror::Error, Debug)]
76
+ //! #[error("this is a bad number")]
77
+ //! struct BadNumber;
78
+ //!
79
+ //! fn parse_string<'a>(input: Input<'a>) -> ParseResult<'a, String, BadString> {
80
+ //! Err(ParseError::Error(BadString))
81
+ //! }
82
+ //!
83
+ //! fn parse_number<'a>(input: Input<'a>) -> ParseResult<'a, u32, BadNumber> {
84
+ //! Err(ParseError::Error(BadNumber))
85
+ //! }
86
+ //!
87
+ //! #[derive(thiserror::Error, Debug)]
88
+ //! struct CombinedError{
89
+ //! #[error(transparent)]
90
+ //! String(#[from] BadString),
91
+ //! #[error(transparent)]
92
+ //! Number(#[from] BadNumber),
93
+ //! }
94
+ //!
95
+ //! fn parse_string_then_number<'a>(input: Input<'a>) -> ParseResult<'a, (String, u32), CombinedError> {
96
+ //! // Note the `e.lift()` here, this works because of the `From<BadString>` impl generated by
97
+ //! // `thiserror::Error`
98
+ //! let (i, thestring) = parse_string(input).map_err(|e| e.lift())?;
99
+ //! let (i, thenumber) = parse_number(i).map_err(|e| e.lift())?;
100
+ //! Ok((i, (thestring, thenumber)))
101
+ //! }
102
+ //! ```
103
+
104
+ use core::num::NonZeroUsize;
105
+ use std::convert::TryInto;
106
+
107
+ pub(crate) mod leb128;
108
+ use crate::{ActorId, ChangeHash};
109
+
110
+ const HASH_SIZE: usize = 32; // 256 bits = 32 bytes
111
+
112
+ #[allow(unused_imports)]
113
+ pub(crate) use self::leb128::{leb128_i64, leb128_u32, leb128_u64, nonzero_leb128_u64};
114
+
115
+ pub(crate) type ParseResult<'a, O, E> = Result<(Input<'a>, O), ParseError<E>>;
116
+
117
+ /// The input to be parsed. This is a combination of an underlying slice, plus an offset into that
118
+ /// slice. Consequently it is very cheap to copy.
119
+ #[derive(PartialEq, Clone, Copy)]
120
+ pub(crate) struct Input<'a> {
121
+ bytes: &'a [u8],
122
+ position: usize,
123
+ original: &'a [u8],
124
+ }
125
+
126
+ impl std::fmt::Debug for Input<'_> {
127
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
128
+ write!(
129
+ f,
130
+ "Input(len: {}, position: {}, original_len: {})",
131
+ self.bytes.len(),
132
+ self.position,
133
+ self.original.len()
134
+ )
135
+ }
136
+ }
137
+
138
+ impl<'a> Input<'a> {
139
+ pub(crate) fn new(bytes: &'a [u8]) -> Self {
140
+ Self {
141
+ bytes,
142
+ position: 0,
143
+ original: bytes,
144
+ }
145
+ }
146
+
147
+ #[cfg(test)]
148
+ pub(in crate::storage::parse) fn with_position(bytes: &'a [u8], position: usize) -> Input<'a> {
149
+ let remaining = &bytes[position..];
150
+ Self {
151
+ bytes: remaining,
152
+ position,
153
+ original: bytes,
154
+ }
155
+ }
156
+
157
+ pub(crate) fn empty() -> Self {
158
+ Self {
159
+ bytes: &[],
160
+ position: 0,
161
+ original: &[],
162
+ }
163
+ }
164
+
165
+ fn take_1<E>(&self) -> ParseResult<'a, u8, E> {
166
+ if let Some(need) = NonZeroUsize::new(1_usize.saturating_sub(self.bytes.len())) {
167
+ Err(ParseError::Incomplete(Needed::Size(need)))
168
+ } else {
169
+ let (result, remaining) = self.bytes.split_at(1);
170
+ let new_input = Input {
171
+ bytes: remaining,
172
+ original: self.original,
173
+ position: self.position + 1,
174
+ };
175
+ Ok((new_input, result[0]))
176
+ }
177
+ }
178
+
179
+ fn take_n<E>(&self, n: usize) -> ParseResult<'a, &'a [u8], E> {
180
+ if let Some(need) = NonZeroUsize::new(n.saturating_sub(self.bytes.len())) {
181
+ Err(ParseError::Incomplete(Needed::Size(need)))
182
+ } else {
183
+ let (result, remaining) = self.bytes.split_at(n);
184
+ let new_input = Input {
185
+ bytes: remaining,
186
+ original: self.original,
187
+ position: self.position + n,
188
+ };
189
+ Ok((new_input, result))
190
+ }
191
+ }
192
+
193
+ fn take_4<E>(&self) -> ParseResult<'a, [u8; 4], E> {
194
+ if let Some(need) = NonZeroUsize::new(4_usize.saturating_sub(self.bytes.len())) {
195
+ Err(ParseError::Incomplete(Needed::Size(need)))
196
+ } else {
197
+ let (result, remaining) = self.bytes.split_at(4);
198
+ let new_input = Input {
199
+ bytes: remaining,
200
+ original: self.original,
201
+ position: self.position + 4,
202
+ };
203
+ Ok((new_input, result.try_into().expect("we checked the length")))
204
+ }
205
+ }
206
+
207
+ fn range_of<P, R, E>(&self, mut parser: P) -> ParseResult<'a, RangeOf<R>, E>
208
+ where
209
+ P: Parser<'a, R, E>,
210
+ {
211
+ let (new_input, value) = parser.parse(*self)?;
212
+ let range = self.position..new_input.position;
213
+ Ok((new_input, RangeOf { range, value }))
214
+ }
215
+
216
+ fn rest<E>(&self) -> ParseResult<'a, &'a [u8], E> {
217
+ let position = self.position + self.bytes.len();
218
+ let new_input = Self {
219
+ position,
220
+ original: self.original,
221
+ bytes: &[],
222
+ };
223
+ Ok((new_input, self.bytes))
224
+ }
225
+
226
+ fn truncate(&self, length: usize) -> Input<'a> {
227
+ let length = if length > self.bytes.len() {
228
+ self.bytes.len()
229
+ } else {
230
+ length
231
+ };
232
+ Input {
233
+ bytes: &self.bytes[..length],
234
+ position: self.position,
235
+ original: &self.original[..(self.position + length)],
236
+ }
237
+ }
238
+
239
+ fn skip(&self, length: usize) -> Input<'a> {
240
+ if length > self.bytes.len() {
241
+ Input {
242
+ bytes: &[],
243
+ position: self.bytes.len(),
244
+ original: self.original,
245
+ }
246
+ } else {
247
+ Input {
248
+ bytes: &self.bytes[length..],
249
+ position: self.position + length,
250
+ original: &self.original[(self.position + length)..],
251
+ }
252
+ }
253
+ }
254
+
255
+ /// Split this input into two separate inputs, the first is the same as the current input but
256
+ /// with the remaining unconsumed_bytes set to at most length. The remaining `Input` is the bytes
257
+ /// after `length`.
258
+ ///
259
+ /// This is useful if you are parsing input which contains length delimited chunks. In this
260
+ /// case you may have a single input where you parse a header, then you want to parse the
261
+ /// current input up until the length and then parse the next chunk from the remainign input.
262
+ /// For example:
263
+ ///
264
+ /// ```rust,ignore
265
+ /// # use automerge::storage::parse::{Input, ParseResult};
266
+ ///
267
+ /// fn parse_chunk(input: Input<'_>) -> ParseResult<(), ()> {
268
+ /// Ok(())
269
+ /// }
270
+ ///
271
+ /// # fn main() -> ParseResult<(), ()> {
272
+ /// let incoming_bytes: &[u8] = todo!();
273
+ /// let mut input = Input::new(incoming_bytes);
274
+ /// let mut chunks = Vec::new();
275
+ /// while !input.is_empty() {
276
+ /// let (i, chunk_len) = leb128_u64(input)?;
277
+ /// let Split{first: i, remaining} = i.split(chunk_len);
278
+ /// // Note that here, the `i` we pass into `parse_chunk` has already parsed the header,
279
+ /// // so the logic of the `parse_chunk` function doesn't need to reimplement the header
280
+ /// // parsing
281
+ /// let (i, chunk) = parse_chunk(i)?;
282
+ /// let input = remaining;
283
+ /// }
284
+ /// parse_chunk(i);
285
+ /// # }
286
+ /// ```
287
+ pub(crate) fn split(&self, length: usize) -> Split<'a> {
288
+ Split {
289
+ first: self.truncate(length),
290
+ remaining: self.skip(length),
291
+ }
292
+ }
293
+
294
+ /// Return a new `Input` which forgets about the consumed input. The new `Input` will have it's
295
+ /// position set to 0. This is equivalent to `Input::new(self.bytes())`
296
+ pub(crate) fn reset(&self) -> Input<'a> {
297
+ Input::new(self.bytes)
298
+ }
299
+
300
+ /// Check if there are any more bytes left to consume
301
+ pub(crate) fn is_empty(&self) -> bool {
302
+ self.bytes.is_empty()
303
+ }
304
+
305
+ /// The bytes which have not yet been consumed
306
+ pub(crate) fn unconsumed_bytes(&self) -> &'a [u8] {
307
+ self.bytes
308
+ }
309
+
310
+ /// The bytes behind this input - including bytes which have been consumed
311
+ #[allow(clippy::misnamed_getters)]
312
+ pub(crate) fn bytes(&self) -> &'a [u8] {
313
+ self.original
314
+ }
315
+ }
316
+
317
+ /// Returned by [`Input::split`]
318
+ pub(crate) struct Split<'a> {
319
+ /// The input up to the length passed to `split`. This is identical to the original input
320
+ /// except that [`Input::bytes`] and [`Input::unconsumed_bytes`] will only return the original
321
+ /// input up to `length` bytes from the point at which `split` was called.
322
+ pub(crate) first: Input<'a>,
323
+ /// The remaining input after the length passed to `split`. This is equivalent to
324
+ ///
325
+ /// ```rust,ignore
326
+ /// # use automerge::storage::parse::Input;
327
+ /// # let split_length = 1;
328
+ /// let original_input = todo!();
329
+ /// Input::new(original_input.bytes()[split_length..])
330
+ /// ```
331
+ pub(crate) remaining: Input<'a>,
332
+ }
333
+
334
+ pub(crate) trait Parser<'a, O, E> {
335
+ fn parse(&mut self, input: Input<'a>) -> ParseResult<'a, O, E>;
336
+ }
337
+
338
+ impl<'a, O, F, E> Parser<'a, O, E> for F
339
+ where
340
+ F: FnMut(Input<'a>) -> ParseResult<'a, O, E>,
341
+ {
342
+ fn parse(&mut self, input: Input<'a>) -> ParseResult<'a, O, E> {
343
+ (self)(input)
344
+ }
345
+ }
346
+
347
+ #[derive(Clone, Debug, PartialEq)]
348
+ pub(crate) enum ParseError<E> {
349
+ /// Some application specific error occurred
350
+ Error(E),
351
+ /// A combinator requested more data than we have available
352
+ Incomplete(Needed),
353
+ }
354
+
355
+ impl<E> ParseError<E> {
356
+ /// Convert any underlying `E` into `F`. This is useful when you are composing parsers
357
+ pub(crate) fn lift<F>(self) -> ParseError<F>
358
+ where
359
+ F: From<E>,
360
+ {
361
+ match self {
362
+ Self::Error(e) => ParseError::Error(F::from(e)),
363
+ Self::Incomplete(n) => ParseError::Incomplete(n),
364
+ }
365
+ }
366
+ }
367
+
368
+ impl<E: std::fmt::Display> std::fmt::Display for ParseError<E> {
369
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
370
+ match self {
371
+ Self::Error(e) => write!(f, "{}", e),
372
+ Self::Incomplete(_) => write!(f, "not enough data"),
373
+ }
374
+ }
375
+ }
376
+
377
+ impl<E: std::fmt::Display + std::fmt::Debug> std::error::Error for ParseError<E> {}
378
+
379
+ /// How much more input we need
380
+ #[derive(Clone, Debug, PartialEq)]
381
+ pub(crate) enum Needed {
382
+ /// We don't know how much more
383
+ #[allow(dead_code)]
384
+ Unknown,
385
+ /// We need _at least_ this much more
386
+ Size(NonZeroUsize),
387
+ }
388
+
389
+ /// Map the function `f` over the result of `parser` returning a new parser
390
+ pub(crate) fn map<'a, O1, O2, F, G, Er>(
391
+ mut parser: F,
392
+ mut f: G,
393
+ ) -> impl FnMut(Input<'a>) -> ParseResult<'a, O2, Er>
394
+ where
395
+ F: Parser<'a, O1, Er>,
396
+ G: FnMut(O1) -> O2,
397
+ {
398
+ move |input: Input<'a>| {
399
+ let (input, o1) = parser.parse(input)?;
400
+ Ok((input, f(o1)))
401
+ }
402
+ }
403
+
404
+ /// Pull one byte from the input
405
+ pub(crate) fn take1<E>(input: Input<'_>) -> ParseResult<'_, u8, E> {
406
+ input.take_1()
407
+ }
408
+
409
+ /// Parse an array of four bytes from the input
410
+ pub(crate) fn take4<E>(input: Input<'_>) -> ParseResult<'_, [u8; 4], E> {
411
+ input.take_4()
412
+ }
413
+
414
+ /// Parse a slice of length `n` from `input`
415
+ pub(crate) fn take_n<E>(n: usize, input: Input<'_>) -> ParseResult<'_, &[u8], E> {
416
+ input.take_n(n)
417
+ }
418
+
419
+ /// Parse a length prefixed collection of `g`
420
+ ///
421
+ /// This first parses a LEB128 encoded `u64` from the input, then applies the parser `g` this many
422
+ /// times, returning the result in a `Vec`.
423
+ pub(crate) fn length_prefixed<'a, G, O, Er>(
424
+ mut g: G,
425
+ ) -> impl FnMut(Input<'a>) -> ParseResult<'a, Vec<O>, Er>
426
+ where
427
+ G: Parser<'a, O, Er>,
428
+ Er: From<leb128::Error>,
429
+ {
430
+ move |input: Input<'a>| {
431
+ let (i, count) = leb128_u64(input).map_err(|e| e.lift())?;
432
+ let mut res = Vec::new();
433
+ let mut input = i;
434
+ for _ in 0..count {
435
+ match g.parse(input) {
436
+ Ok((i, e)) => {
437
+ input = i;
438
+ res.push(e);
439
+ }
440
+ Err(e) => {
441
+ return Err(e);
442
+ }
443
+ }
444
+ }
445
+ Ok((input, res))
446
+ }
447
+ }
448
+
449
+ /// Parse a length prefixed array of bytes from the input
450
+ ///
451
+ /// This first parses a LEB128 encoded `u64` from the input, then parses this many bytes from the
452
+ /// underlying input.
453
+ pub(crate) fn length_prefixed_bytes<E>(input: Input<'_>) -> ParseResult<'_, &[u8], E>
454
+ where
455
+ E: From<leb128::Error>,
456
+ {
457
+ let (i, len) = leb128_u64(input).map_err(|e| e.lift())?;
458
+ take_n(len as usize, i)
459
+ }
460
+
461
+ /// Apply two parsers, returning the result in a 2 tuple
462
+ ///
463
+ /// This first applies `f`, then `g` and returns the result as `(f, g)`.
464
+ pub(super) fn tuple2<'a, F, E, G, H, Er>(
465
+ mut f: F,
466
+ mut g: G,
467
+ ) -> impl FnMut(Input<'a>) -> ParseResult<'a, (E, H), Er>
468
+ where
469
+ F: Parser<'a, E, Er>,
470
+ G: Parser<'a, H, Er>,
471
+ {
472
+ move |input: Input<'a>| {
473
+ let (i, one) = f.parse(input)?;
474
+ let (i, two) = g.parse(i)?;
475
+ Ok((i, (one, two)))
476
+ }
477
+ }
478
+
479
+ /// Apply the parser `f` `n` times and reutrn the result in a `Vec`
480
+ pub(super) fn apply_n<'a, F, E, Er>(
481
+ n: usize,
482
+ mut f: F,
483
+ ) -> impl FnMut(Input<'a>) -> ParseResult<'a, Vec<E>, Er>
484
+ where
485
+ F: Parser<'a, E, Er>,
486
+ {
487
+ move |input: Input<'a>| {
488
+ let mut i = input;
489
+ let mut result = Vec::new();
490
+ for _ in 0..n {
491
+ let (new_i, e) = f.parse(i)?;
492
+ result.push(e);
493
+ i = new_i;
494
+ }
495
+ Ok((i, result))
496
+ }
497
+ }
498
+
499
+ /// Parse a length prefixed actor ID
500
+ ///
501
+ /// This first parses a LEB128 encoded u64 from the input, then the corresponding number of bytes
502
+ /// which are returned wrapped in an `ActorId`
503
+ pub(crate) fn actor_id<E>(input: Input<'_>) -> ParseResult<'_, ActorId, E>
504
+ where
505
+ E: From<leb128::Error>,
506
+ {
507
+ let (i, length) = leb128_u64(input).map_err(|e| e.lift())?;
508
+ let (i, bytes) = take_n(length as usize, i)?;
509
+ Ok((i, bytes.into()))
510
+ }
511
+
512
+ /// Parse a change hash.
513
+ ///
514
+ /// This is just a nice wrapper around `take_4`
515
+ pub(crate) fn change_hash<E>(input: Input<'_>) -> ParseResult<'_, ChangeHash, E> {
516
+ let (i, bytes) = take_n(HASH_SIZE, input)?;
517
+ let byte_arr: ChangeHash = bytes.try_into().expect("we checked the length above");
518
+ Ok((i, byte_arr))
519
+ }
520
+
521
+ #[derive(thiserror::Error, Debug)]
522
+ #[error("invalid UTF-8")]
523
+ pub(crate) struct InvalidUtf8;
524
+
525
+ /// Parse a length prefixed UTF-8 string
526
+ ///
527
+ /// This first parses a LEB128 encode `u64` from the input, then parses this many bytes from the
528
+ /// input before attempting to convert these bytes into a `String`, returning
529
+ /// `ParseError::Error(InvalidUtf8)` if that fails.
530
+ pub(crate) fn utf_8<E>(len: usize, input: Input<'_>) -> ParseResult<'_, String, E>
531
+ where
532
+ E: From<InvalidUtf8>,
533
+ {
534
+ let (i, bytes) = take_n(len, input)?;
535
+ let result = String::from_utf8(bytes.to_vec())
536
+ .map_err(|_| ParseError::Error(InvalidUtf8))
537
+ .map_err(|e| e.lift())?;
538
+ Ok((i, result))
539
+ }
540
+
541
+ /// Returned from `range_of`
542
+ pub(crate) struct RangeOf<T> {
543
+ /// The range in the input where we parsed from
544
+ pub(crate) range: std::ops::Range<usize>,
545
+ /// The value we parsed
546
+ pub(crate) value: T,
547
+ }
548
+
549
+ /// Evaluate `parser` and then return the value parsed, as well as the range in the input which we
550
+ /// just parsed.
551
+ ///
552
+ /// This is useful when you want to parse some data from an input in order to check that is valid,
553
+ /// but you will also be holding on to the input data and want to know where in the input data the
554
+ /// valid data was parsed from.
555
+ ///
556
+ /// # Example
557
+ ///
558
+ /// Imagine that we are parsing records of some kind from a file, as well as parsing the record we
559
+ /// want to record the offset in the file where the record is so we can update it in place.
560
+ ///
561
+ /// ```rust,ignore
562
+ /// # use automerge::storage::parse::{ParseResult, Input};
563
+ /// struct Message;
564
+ /// struct Record {
565
+ /// message: Message,
566
+ /// location: std::ops::Range<usize>
567
+ /// }
568
+ ///
569
+ /// fn parse_message<'a>(input: Input<'a>) -> ParseResult<'a, Message, ()> {
570
+ /// unimplemented!()
571
+ /// }
572
+ ///
573
+ /// fn parse_record<'a>(input: Input<'a>) -> ParseResult<'a, Record, ()> {
574
+ /// let (i, RangeOf{range: location, value: message}) = range_of(|i| parse_message(i), i)?;
575
+ /// Ok((i, Record {
576
+ /// location, // <- this is the location in the input where the message was parsed from
577
+ /// message,
578
+ /// }))
579
+ /// }
580
+ ///
581
+ /// let file_contents: Vec<u8> = unimplemented!();
582
+ /// let input = Input::new(&file_contents);
583
+ /// let record = parse_record(input).unwrap().1;
584
+ /// ```
585
+ pub(crate) fn range_of<'a, P, R, E>(parser: P, input: Input<'a>) -> ParseResult<'a, RangeOf<R>, E>
586
+ where
587
+ P: Parser<'a, R, E>,
588
+ {
589
+ input.range_of(parser)
590
+ }
591
+
592
+ pub(crate) fn range_only_unless_empty<'a, P, R, E>(
593
+ parser: P,
594
+ input: Input<'a>,
595
+ ) -> ParseResult<'a, std::ops::Range<usize>, E>
596
+ where
597
+ P: Parser<'a, R, E>,
598
+ {
599
+ if input.is_empty() {
600
+ Ok((input, 0..0))
601
+ } else {
602
+ range_only(parser, input)
603
+ }
604
+ }
605
+
606
+ pub(crate) fn range_only<'a, P, R, E>(
607
+ parser: P,
608
+ input: Input<'a>,
609
+ ) -> ParseResult<'a, std::ops::Range<usize>, E>
610
+ where
611
+ P: Parser<'a, R, E>,
612
+ {
613
+ input.range_of(parser).map(|(i, r)| (i, r.range))
614
+ }
615
+
616
+ /// Parse all the remaining input from the parser. This can never fail
617
+ pub(crate) fn take_rest<E>(input: Input<'_>) -> ParseResult<'_, &'_ [u8], E> {
618
+ input.rest()
619
+ }
@@ -0,0 +1,27 @@
1
+ use std::iter::Iterator;
2
+
3
+ use crate::{
4
+ change_graph::ChangeGraph,
5
+ op_set2::OpSet,
6
+ storage::{change::DEFLATE_MIN_SIZE, CompressConfig, Document},
7
+ };
8
+
9
+ /// # Panics
10
+ ///
11
+ /// * If any of the `heads` are not in `changes`
12
+ /// * If any of ops in `ops` reference an actor which is not in `actors`
13
+ /// * If any of ops in `ops` reference a property which is not in `props`
14
+ /// * If any of the changes reference a dependency index which is not in `changes`
15
+ pub(crate) fn save_document(
16
+ op_set: &OpSet,
17
+ change_graph: &ChangeGraph,
18
+ config: Option<CompressConfig>,
19
+ ) -> Vec<u8> {
20
+ assert_eq!(op_set.actors.len(), change_graph.actor_ids().count());
21
+
22
+ let config = config.unwrap_or(CompressConfig::Threshold(DEFLATE_MIN_SIZE));
23
+
24
+ let doc = Document::new(op_set, change_graph, config);
25
+
26
+ doc.into_bytes()
27
+ }
@@ -0,0 +1,26 @@
1
+ use std::ops::Range;
2
+
3
+ pub(crate) mod bundle;
4
+ pub(crate) mod change;
5
+ mod chunk;
6
+ pub(crate) mod columns;
7
+ pub(crate) mod document;
8
+ pub(crate) mod load;
9
+ pub(crate) mod parse;
10
+
11
+ pub use bundle::{Bundle, BundleChange, BundleChangeIter};
12
+ pub use load::VerificationMode;
13
+
14
+ pub(crate) use {
15
+ bundle::{BundleMetadata, BundleStorage},
16
+ change::{AsChangeOp, Change, ChangeOp, Compressed, ReadChangeOpError},
17
+ chunk::{CheckSum, Chunk, ChunkType, Header},
18
+ columns::{ColumnSpec, Columns, RawColumn, RawColumns},
19
+ document::{CompressConfig, Document},
20
+ };
21
+
22
+ fn shift_range(range: Range<usize>, by: usize) -> Range<usize> {
23
+ range.start + by..range.end + by
24
+ }
25
+
26
+ pub(crate) const MAGIC_BYTES: [u8; 4] = [0x85, 0x6f, 0x4a, 0x83];