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,439 @@
1
+ cmake_minimum_required(VERSION 3.25 FATAL_ERROR)
2
+
3
+ project(automerge-c VERSION 0.3.0
4
+ LANGUAGES C
5
+ DESCRIPTION "C bindings for the Automerge Rust library.")
6
+
7
+ include(CTest)
8
+
9
+ include(CMakePackageConfigHelpers)
10
+
11
+ include(GNUInstallDirs)
12
+
13
+ list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
14
+
15
+ set(DEFAULT_LIBRARY_NAME "automerge")
16
+
17
+ if(NOT DEFINED LIBRARY_NAME)
18
+ set(LIBRARY_NAME "${DEFAULT_LIBRARY_NAME}")
19
+ endif()
20
+
21
+ set(DEFAULT_BINDINGS_NAME "${DEFAULT_LIBRARY_NAME}_core")
22
+
23
+ if(NOT DEFINED BINDINGS_NAME)
24
+ set(BINDINGS_NAME "${DEFAULT_BINDINGS_NAME}")
25
+ endif()
26
+
27
+ if(NOT DEFINED STATIC_LIBRARY_PREFIX)
28
+ set(STATIC_LIBRARY_PREFIX "${CMAKE_STATIC_LIBRARY_PREFIX}")
29
+ endif()
30
+
31
+ if(NOT DEFINED STATIC_LIBRARY_SUFFIX)
32
+ set(STATIC_LIBRARY_SUFFIX "${CMAKE_STATIC_LIBRARY_SUFFIX}")
33
+ endif()
34
+
35
+ IF(NOT DEFINED SHARED_LIBRARY_PREFIX)
36
+ set(SHARED_LIBRARY_PREFIX "${CMAKE_SHARED_LIBRARY_PREFIX}")
37
+ endif()
38
+
39
+ if(NOT DEFINED SHARED_LIBRARY_SUFFIX)
40
+ set(SHARED_LIBRARY_SUFFIX "${CMAKE_SHARED_LIBRARY_SUFFIX}")
41
+ endif()
42
+
43
+ option(BUILD_SHARED_LIBS "Enable the choice of a shared or static library.")
44
+
45
+ option(UTF32_INDEXING "Enable UTF-32 indexing.")
46
+
47
+ string(MAKE_C_IDENTIFIER ${PROJECT_NAME} SYMBOL_PREFIX)
48
+
49
+ string(TOUPPER ${SYMBOL_PREFIX} SYMBOL_PREFIX)
50
+
51
+ set(CARGO_TARGET_DIR "${PROJECT_BINARY_DIR}/Cargo/target")
52
+
53
+ set(CBINDGEN_INCLUDEDIR "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_INCLUDEDIR}")
54
+
55
+ set(CBINDGEN_TARGET_DIR "${CBINDGEN_INCLUDEDIR}/${PROJECT_NAME}")
56
+
57
+ find_program (CARGO_CMD
58
+ "cargo"
59
+ PATHS "$ENV{CARGO_HOME}/bin"
60
+ DOC "The Rust package manager"
61
+ )
62
+
63
+ if(NOT CARGO_CMD)
64
+ message(FATAL_ERROR "Cargo (Rust package manager) not found! "
65
+ "Please install it and/or set the CARGO_HOME "
66
+ "environment variable to its path.")
67
+ endif()
68
+
69
+ find_program(RUSTC_CMD
70
+ "rustc"
71
+ PATHS "$ENV{CARGO_HOME}/bin"
72
+ DOC "The Rust compiler"
73
+ )
74
+
75
+ if(NOT RUSTC_CMD)
76
+ message(FATAL_ERROR "Rustc (Rust compiler) not found! "
77
+ "Please install it and/or set the CARGO_HOME "
78
+ "environment variable to its path.")
79
+ endif()
80
+
81
+ # In order to build with -Z build-std, we need to pass target explicitly.
82
+ # https://doc.rust-lang.org/cargo/reference/unstable.html#build-std
83
+ execute_process (
84
+ COMMAND ${RUSTC_CMD} -vV
85
+ OUTPUT_VARIABLE RUSTC_VERSION
86
+ OUTPUT_STRIP_TRAILING_WHITESPACE
87
+ )
88
+ string(REGEX REPLACE ".*host: ([^ \n]*).*" "\\1"
89
+ CARGO_TARGET
90
+ ${RUSTC_VERSION}
91
+ )
92
+
93
+ set(CARGO_FLAGS --target=${CARGO_TARGET})
94
+
95
+ set(RUSTFLAGS "")
96
+
97
+ if(CMAKE_BUILD_TYPE MATCHES Debug)
98
+ set(CARGO_BUILD_TYPE "debug")
99
+ else()
100
+ set(CARGO_BUILD_TYPE "release")
101
+
102
+ if (NOT RUSTC_VERSION MATCHES "nightly")
103
+ set(RUSTUP_TOOLCHAIN nightly)
104
+ endif()
105
+
106
+ set(RUSTFLAGS "${RUSTFLAGS} -C panic=abort")
107
+
108
+ set(CARGO_FLAGS -Z build-std=std,panic_abort --release ${CARGO_FLAGS})
109
+ endif()
110
+
111
+ if(UTF32_INDEXING)
112
+ set(CARGO_FEATURES "")
113
+ set(TEXT_INDEXING_ENCODING "UTF32")
114
+ else()
115
+ set(CARGO_FEATURES "-F automerge/utf8-indexing")
116
+ set(TEXT_INDEXING_ENCODING "UTF8")
117
+ endif()
118
+
119
+ set(CARGO_BINARY_DIR "${CARGO_TARGET_DIR}/${CARGO_TARGET}/${CARGO_BUILD_TYPE}")
120
+
121
+ configure_file(
122
+ ${PROJECT_SOURCE_DIR}/cmake/Cargo.toml.in
123
+ ${PROJECT_SOURCE_DIR}/Cargo.toml
124
+ NEWLINE_STYLE LF
125
+ )
126
+
127
+ set(INCLUDE_GUARD_PREFIX "${SYMBOL_PREFIX}")
128
+
129
+ configure_file(
130
+ ${PROJECT_SOURCE_DIR}/cmake/cbindgen.toml.in
131
+ ${PROJECT_SOURCE_DIR}/cbindgen.toml
132
+ @ONLY
133
+ NEWLINE_STYLE LF
134
+ )
135
+
136
+ set(CARGO_OUTPUT
137
+ ${CBINDGEN_TARGET_DIR}/${LIBRARY_NAME}.h
138
+ ${CARGO_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${BINDINGS_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}
139
+ )
140
+
141
+ # \note cbindgen's naming behavior isn't fully configurable and it ignores
142
+ # `const fn` calls (https://github.com/eqrion/cbindgen/issues/252).
143
+ add_custom_command(
144
+ OUTPUT
145
+ ${CARGO_OUTPUT}
146
+ COMMAND
147
+ # Force cbindgen to regenerate the header file by updating its configuration file; removing the header won't.
148
+ ${CMAKE_COMMAND} -DCONDITION=NOT_EXISTS -P ${PROJECT_SOURCE_DIR}/cmake/file-touch.cmake -- ${CBINDGEN_TARGET_DIR}/${LIBRARY_NAME}.h ${PROJECT_SOURCE_DIR}/cbindgen.toml
149
+ COMMAND
150
+ ${CMAKE_COMMAND} -E env CARGO_TARGET_DIR=${CARGO_TARGET_DIR} CBINDGEN_TARGET_DIR=${CBINDGEN_TARGET_DIR} RUSTUP_TOOLCHAIN=${RUSTUP_TOOLCHAIN} RUSTFLAGS=${RUSTFLAGS} ${CARGO_CMD} build ${CARGO_FLAGS} ${CARGO_FEATURES}
151
+ COMMAND
152
+ # Compensate for cbindgen's translation of consecutive uppercase letters to "ScreamingSnakeCase".
153
+ ${CMAKE_COMMAND} -DMATCH_REGEX=A_M\([^_]+\)_ -DREPLACE_EXPR=AM_\\1_ -P ${PROJECT_SOURCE_DIR}/cmake/file-regex-replace.cmake -- ${CBINDGEN_TARGET_DIR}/${LIBRARY_NAME}.h
154
+ COMMAND
155
+ # Compensate for cbindgen ignoring `std::mem::size_of<usize>()` calls.
156
+ ${CMAKE_COMMAND} -DMATCH_REGEX=USIZE_ -DREPLACE_EXPR=\+${CMAKE_SIZEOF_VOID_P} -P ${PROJECT_SOURCE_DIR}/cmake/file-regex-replace.cmake -- ${CBINDGEN_TARGET_DIR}/${LIBRARY_NAME}.h
157
+ MAIN_DEPENDENCY
158
+ src/lib.rs
159
+ DEPENDS
160
+ src/actor_id.rs
161
+ src/byte_span.rs
162
+ src/change.rs
163
+ src/cursor.rs
164
+ src/doc.rs
165
+ src/doc/list.rs
166
+ src/doc/map.rs
167
+ src/doc/mark.rs
168
+ src/doc/utils.rs
169
+ src/index.rs
170
+ src/item.rs
171
+ src/items.rs
172
+ src/obj.rs
173
+ src/result.rs
174
+ src/sync.rs
175
+ src/sync/have.rs
176
+ src/sync/message.rs
177
+ src/sync/state.rs
178
+ ${PROJECT_SOURCE_DIR}/build.rs
179
+ ${PROJECT_SOURCE_DIR}/cmake/Cargo.toml.in
180
+ ${PROJECT_SOURCE_DIR}/cmake/cbindgen.toml.in
181
+ WORKING_DIRECTORY
182
+ ${PROJECT_SOURCE_DIR}
183
+ COMMENT
184
+ "Producing the bindings' artifacts with Cargo..."
185
+ VERBATIM
186
+ )
187
+
188
+ add_custom_target(${BINDINGS_NAME}_artifacts ALL
189
+ DEPENDS ${CARGO_OUTPUT}
190
+ )
191
+
192
+ add_library(${BINDINGS_NAME} STATIC IMPORTED GLOBAL)
193
+
194
+ target_include_directories(${BINDINGS_NAME} INTERFACE "${CBINDGEN_INCLUDEDIR}")
195
+
196
+ set_target_properties(
197
+ ${BINDINGS_NAME}
198
+ PROPERTIES
199
+ # \note Cargo writes a debug build into a nested directory instead of
200
+ # decorating its name.
201
+ DEBUG_POSTFIX ""
202
+ DEFINE_SYMBOL ""
203
+ IMPORTED_IMPLIB ""
204
+ IMPORTED_LOCATION "${CARGO_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${BINDINGS_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}"
205
+ IMPORTED_NO_SONAME "TRUE"
206
+ IMPORTED_SONAME ""
207
+ LINKER_LANGUAGE C
208
+ PUBLIC_HEADER "${CBINDGEN_TARGET_DIR}/${LIBRARY_NAME}.h"
209
+ SOVERSION "${PROJECT_VERSION_MAJOR}"
210
+ VERSION "${PROJECT_VERSION}"
211
+ # \note Cargo exports all of the symbols automatically.
212
+ WINDOWS_EXPORT_ALL_SYMBOLS "TRUE"
213
+ )
214
+
215
+ target_compile_definitions(${BINDINGS_NAME} INTERFACE $<TARGET_PROPERTY:${BINDINGS_NAME},DEFINE_SYMBOL>)
216
+
217
+ set(UTILS_SUBDIR "utils")
218
+
219
+ add_custom_command(
220
+ OUTPUT
221
+ ${CBINDGEN_TARGET_DIR}/${UTILS_SUBDIR}/enum_string.h
222
+ ${PROJECT_BINARY_DIR}/src/${UTILS_SUBDIR}/enum_string.c
223
+ COMMAND
224
+ ${CMAKE_COMMAND} -DPROJECT_NAME=${PROJECT_NAME} -DLIBRARY_NAME=${LIBRARY_NAME} -DSUBDIR=${UTILS_SUBDIR} -P ${PROJECT_SOURCE_DIR}/cmake/enum-string-functions-gen.cmake -- ${CBINDGEN_TARGET_DIR}/${LIBRARY_NAME}.h ${CBINDGEN_TARGET_DIR}/${UTILS_SUBDIR}/enum_string.h ${PROJECT_BINARY_DIR}/src/${UTILS_SUBDIR}/enum_string.c
225
+ MAIN_DEPENDENCY
226
+ ${CBINDGEN_TARGET_DIR}/${LIBRARY_NAME}.h
227
+ DEPENDS
228
+ ${PROJECT_SOURCE_DIR}/cmake/enum-string-functions-gen.cmake
229
+ WORKING_DIRECTORY
230
+ ${PROJECT_SOURCE_DIR}
231
+ COMMENT
232
+ "Generating the enum string functions with CMake..."
233
+ VERBATIM
234
+ )
235
+
236
+ add_custom_target(${LIBRARY_NAME}_utilities
237
+ DEPENDS ${CBINDGEN_TARGET_DIR}/${UTILS_SUBDIR}/enum_string.h
238
+ ${PROJECT_BINARY_DIR}/src/${UTILS_SUBDIR}/enum_string.c
239
+ )
240
+
241
+ add_library(${LIBRARY_NAME})
242
+
243
+ target_compile_features(${LIBRARY_NAME} PRIVATE c_std_99)
244
+
245
+ set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
246
+
247
+ set(THREADS_PREFER_PTHREAD_FLAG TRUE)
248
+
249
+ find_package(Threads REQUIRED)
250
+
251
+ set(LIBRARY_DEPENDENCIES Threads::Threads ${CMAKE_DL_LIBS})
252
+
253
+ if(WIN32)
254
+ list(APPEND LIBRARY_DEPENDENCIES Bcrypt ntdll userenv ws2_32)
255
+ else()
256
+ list(APPEND LIBRARY_DEPENDENCIES m)
257
+ endif()
258
+
259
+ set_target_properties(${LIBRARY_NAME} PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS "TRUE")
260
+
261
+ # \note An imported library's INTERFACE_INCLUDE_DIRECTORIES property can't
262
+ # contain a non-existent path so its build-time include directory
263
+ # must be specified for all of its dependent targets instead.
264
+ target_include_directories(${LIBRARY_NAME}
265
+ PUBLIC "$<BUILD_INTERFACE:${CBINDGEN_INCLUDEDIR};${PROJECT_SOURCE_DIR}/${CMAKE_INSTALL_INCLUDEDIR}>"
266
+ "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
267
+ )
268
+
269
+ add_dependencies(${LIBRARY_NAME} ${BINDINGS_NAME}_artifacts)
270
+
271
+ if(BUILD_SHARED_LIBS)
272
+ target_link_libraries(${LIBRARY_NAME} PUBLIC "$<LINK_LIBRARY:WHOLE_ARCHIVE,${BINDINGS_NAME}>" ${LIBRARY_DEPENDENCIES})
273
+
274
+ # Enable an external build tool to find the shared library in the root of the
275
+ # out-of-source build directory when it has overridden an aspect of its name.
276
+ if(NOT (("${SHARED_LIBRARY_PREFIX}" STREQUAL "${CMAKE_SHARED_LIBRARY_PREFIX}") AND
277
+ ("${LIBRARY_NAME}" STREQUAL "${DEFAULT_LIBRARY_NAME}") AND
278
+ ("${SHARED_LIBRARY_SUFFIX}" STREQUAL "${CMAKE_SHARED_LIBRARY_SUFFIX}")))
279
+ add_custom_command(
280
+ TARGET ${LIBRARY_NAME}
281
+ POST_BUILD
282
+ COMMAND
283
+ ${CMAKE_COMMAND} -E echo "Copying \"${CMAKE_SHARED_LIBRARY_PREFIX}${LIBRARY_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX}\" to \"${PROJECT_BINARY_DIR}/${SHARED_LIBRARY_PREFIX}${LIBRARY_NAME}${SHARED_LIBRARY_SUFFIX}\"..."
284
+ COMMAND
285
+ ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}${LIBRARY_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX} ${PROJECT_BINARY_DIR}/${SHARED_LIBRARY_PREFIX}${LIBRARY_NAME}${SHARED_LIBRARY_SUFFIX}
286
+ WORKING_DIRECTORY
287
+ ${PROJECT_SOURCE_DIR}
288
+ COMMENT
289
+ "Aliasing the library for the external build tool..."
290
+ VERBATIM
291
+ )
292
+ endif()
293
+ else()
294
+ target_link_libraries(${LIBRARY_NAME} PUBLIC ${BINDINGS_NAME} ${LIBRARY_DEPENDENCIES})
295
+
296
+ if(WIN32)
297
+ find_program(LIB_TOOL "lib" REQUIRED)
298
+
299
+ add_custom_command(
300
+ TARGET ${LIBRARY_NAME}
301
+ POST_BUILD
302
+ COMMAND
303
+ ${CMAKE_COMMAND} -E echo "Merging its dependent libraries into \"$<TARGET_FILE:${LIBRARY_NAME}>\"..."
304
+ COMMAND
305
+ ${LIB_TOOL} /OUT:$<TARGET_FILE_NAME:${LIBRARY_NAME}> $<TARGET_FILE_NAME:${LIBRARY_NAME}> $<TARGET_FILE:${BINDINGS_NAME}>
306
+ WORKING_DIRECTORY
307
+ ${PROJECT_BINARY_DIR}
308
+ COMMENT
309
+ "Merging the libraries..."
310
+ VERBATIM
311
+ )
312
+ else()
313
+ set(OBJECTS_DIR objects)
314
+
315
+ set(BINDINGS_OBJECTS_DIR ${OBJECTS_DIR}/$<TARGET_NAME:${BINDINGS_NAME}>)
316
+
317
+ add_custom_command(
318
+ TARGET "${LIBRARY_NAME}"
319
+ POST_BUILD
320
+ COMMAND
321
+ ${CMAKE_COMMAND} -E echo "Merging its dependent libraries into \"$<TARGET_FILE:${LIBRARY_NAME}>\"..."
322
+ COMMAND
323
+ ${CMAKE_COMMAND} -E rm -rf ${OBJECTS_DIR}
324
+ COMMAND
325
+ ${CMAKE_COMMAND} -E make_directory ${BINDINGS_OBJECTS_DIR}
326
+ COMMAND
327
+ ${CMAKE_COMMAND} -E echo "${CMAKE_AR} -x $<TARGET_FILE:${BINDINGS_NAME}>"
328
+ COMMAND
329
+ ${CMAKE_COMMAND} -E chdir ${BINDINGS_OBJECTS_DIR} ${CMAKE_AR} -x $<TARGET_FILE:${BINDINGS_NAME}>
330
+ COMMAND
331
+ ${CMAKE_COMMAND} -E echo "${CMAKE_AR} -rs $<TARGET_FILE_NAME:${LIBRARY_NAME}> ${BINDINGS_OBJECTS_DIR}/*.o"
332
+ COMMAND
333
+ ${CMAKE_AR} -rs $<TARGET_FILE_NAME:${LIBRARY_NAME}> ${BINDINGS_OBJECTS_DIR}/*.o
334
+ WORKING_DIRECTORY
335
+ ${PROJECT_BINARY_DIR}
336
+ COMMENT
337
+ "Merging the libraries' constituent object files..."
338
+ )
339
+ endif()
340
+ endif()
341
+
342
+ if(NOT BUILD_SHARED_LIBS OR WIN32)
343
+ # Enable an external build tool to find the static/import library in the
344
+ # root of the out-of-source build directory when it has overridden an aspect
345
+ # of its name.
346
+ if(NOT (("${STATIC_LIBRARY_PREFIX}" STREQUAL "${CMAKE_STATIC_LIBRARY_PREFIX}") AND
347
+ ("${LIBRARY_NAME}" STREQUAL "${DEFAULT_LIBRARY_NAME}") AND
348
+ ("${STATIC_LIBRARY_SUFFIX}" STREQUAL "${CMAKE_STATIC_LIBRARY_SUFFIX}")))
349
+ add_custom_command(
350
+ TARGET ${LIBRARY_NAME}
351
+ POST_BUILD
352
+ COMMAND
353
+ ${CMAKE_COMMAND} -E echo "(STATIC_LIBRARY_PREFIX, LIBRARY_NAME, STATIC_LIBRARY_SUFFIX) == (${STATIC_LIBRARY_PREFIX}, ${LIBRARY_NAME}, ${STATIC_LIBRARY_SUFFIX})"
354
+ COMMAND
355
+ ${CMAKE_COMMAND} -E echo "Copying \"${PROJECT_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${LIBRARY_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}\" to \"${PROJECT_BINARY_DIR}/${STATIC_LIBRARY_PREFIX}${LIBRARY_NAME}${STATIC_LIBRARY_SUFFIX}\"..."
356
+ COMMAND
357
+ ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${LIBRARY_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX} ${PROJECT_BINARY_DIR}/${STATIC_LIBRARY_PREFIX}${LIBRARY_NAME}${STATIC_LIBRARY_SUFFIX}
358
+ WORKING_DIRECTORY
359
+ ${PROJECT_SOURCE_DIR}
360
+ COMMENT
361
+ "Aliasing the static/import library for the external build tool..."
362
+ VERBATIM
363
+ )
364
+ endif()
365
+ endif()
366
+
367
+ # Generate the configuration header.
368
+ math(EXPR INTEGER_PROJECT_VERSION_MAJOR "${PROJECT_VERSION_MAJOR} * 100000")
369
+
370
+ math(EXPR INTEGER_PROJECT_VERSION_MINOR "${PROJECT_VERSION_MINOR} * 100")
371
+
372
+ math(EXPR INTEGER_PROJECT_VERSION_PATCH "${PROJECT_VERSION_PATCH}")
373
+
374
+ math(EXPR INTEGER_PROJECT_VERSION "${INTEGER_PROJECT_VERSION_MAJOR} + \
375
+ ${INTEGER_PROJECT_VERSION_MINOR} + \
376
+ ${INTEGER_PROJECT_VERSION_PATCH}")
377
+
378
+ configure_file(
379
+ ${PROJECT_SOURCE_DIR}/cmake/config.h.in
380
+ ${CBINDGEN_TARGET_DIR}/config.h
381
+ @ONLY
382
+ NEWLINE_STYLE LF
383
+ )
384
+
385
+ target_sources(${LIBRARY_NAME}
386
+ PRIVATE
387
+ src/${UTILS_SUBDIR}/result.c
388
+ src/${UTILS_SUBDIR}/stack_callback_data.c
389
+ src/${UTILS_SUBDIR}/stack.c
390
+ src/${UTILS_SUBDIR}/string.c
391
+ ${PROJECT_BINARY_DIR}/src/${UTILS_SUBDIR}/enum_string.c
392
+ PUBLIC
393
+ FILE_SET api TYPE HEADERS
394
+ BASE_DIRS
395
+ ${CBINDGEN_INCLUDEDIR}
396
+ ${CMAKE_INSTALL_INCLUDEDIR}
397
+ FILES
398
+ ${CBINDGEN_TARGET_DIR}/${LIBRARY_NAME}.h
399
+ ${CBINDGEN_TARGET_DIR}/${UTILS_SUBDIR}/enum_string.h
400
+ ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/${UTILS_SUBDIR}/result.h
401
+ ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/${UTILS_SUBDIR}/stack_callback_data.h
402
+ ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/${UTILS_SUBDIR}/stack.h
403
+ ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}/${UTILS_SUBDIR}/string.h
404
+ INTERFACE
405
+ FILE_SET config TYPE HEADERS
406
+ BASE_DIRS
407
+ ${CBINDGEN_INCLUDEDIR}
408
+ FILES
409
+ ${CBINDGEN_TARGET_DIR}/config.h
410
+ )
411
+
412
+ install(
413
+ TARGETS ${LIBRARY_NAME}
414
+ EXPORT ${PROJECT_NAME}-config
415
+ FILE_SET api
416
+ FILE_SET config
417
+ )
418
+
419
+ # \note Install the Cargo-built core bindings to enable direct linkage.
420
+ install(
421
+ FILES $<TARGET_PROPERTY:${BINDINGS_NAME},IMPORTED_LOCATION>
422
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}
423
+ )
424
+
425
+ install(EXPORT ${PROJECT_NAME}-config
426
+ FILE ${PROJECT_NAME}-config.cmake
427
+ NAMESPACE "${PROJECT_NAME}::"
428
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${LIB}
429
+ )
430
+
431
+ if(BUILD_TESTING)
432
+ add_subdirectory(test EXCLUDE_FROM_ALL)
433
+
434
+ enable_testing()
435
+ endif()
436
+
437
+ add_subdirectory(docs)
438
+
439
+ add_subdirectory(examples EXCLUDE_FROM_ALL)
@@ -0,0 +1,22 @@
1
+ [package]
2
+ name = "automerge-c"
3
+ version = "0.2.2"
4
+ authors = ["Orion Henry <orion.henry@gmail.com>", "Jason Kankiewicz <jason.kankiewicz@gmail.com>"]
5
+ edition = "2021"
6
+ license = "MIT"
7
+ rust-version = "1.80.0"
8
+
9
+ [lib]
10
+ name = "automerge_core"
11
+ crate-type = ["staticlib"]
12
+ bench = false
13
+ doc = false
14
+
15
+ [dependencies]
16
+ automerge = { path = "../automerge" }
17
+ hex = "^0.4.3"
18
+ libc = "^0.2"
19
+ smol_str = "0.3"
20
+
21
+ [build-dependencies]
22
+ cbindgen = "^0.29"
@@ -0,0 +1,233 @@
1
+ # Overview
2
+
3
+ automerge-c exposes a C API that can either be used directly or as the basis
4
+ for other language bindings that have good support for calling C functions.
5
+
6
+ # Installing
7
+
8
+ ## Prerequisites
9
+
10
+ * Cargo >= 1.71.0
11
+ * CMake >= 3.25
12
+ * CMocka >= 1.1.5
13
+ * Doxygen >= 1.9.1
14
+ * Ninja >= 1.10.1
15
+
16
+ See the main README for instructions on getting your environment set up and then
17
+ you can build the automerge-c library and install its constituent files within
18
+ a root directory of your choosing (e.g. "/usr/local") like so:
19
+
20
+ ```shell
21
+ cmake -E make_directory automerge-c/build
22
+ cmake -S automerge-c -B automerge-c/build
23
+ cmake --build automerge-c/build
24
+ cmake --install automerge-c/build --prefix "/usr/local"
25
+ ```
26
+
27
+ Installation is important because the name, location and structure of CMake's
28
+ out-of-source build subdirectory is subject to change based on the platform and
29
+ the release version; generated headers like `automerge-c/config.h` and
30
+ `automerge-c/utils/enum_string.h` are only sure to be found within their
31
+ installed locations.
32
+
33
+ It's not obvious because they are versioned but the `Cargo.toml` and
34
+ `cbindgen.toml` configuration files are also generated in order to ensure that
35
+ the project name, project version and library name that they contain match those
36
+ specified within the top-level `CMakeLists.txt` file.
37
+
38
+ If you'd like to cross compile the library for different platforms you can do so
39
+ using [cross](https://github.com/cross-rs/cross). For example:
40
+
41
+ - `cross build --manifest-path rust/automerge-c/Cargo.toml -r --target aarch64-unknown-linux-gnu`
42
+
43
+ This will output a shared library in the directory `rust/target/aarch64-unknown-linux-gnu/release/`.
44
+
45
+ You can replace `aarch64-unknown-linux-gnu` with any
46
+ [cross supported targets](https://github.com/cross-rs/cross#supported-targets).
47
+ The targets below are known to work, though other targets are expected to work
48
+ too:
49
+
50
+ - `x86_64-apple-darwin`
51
+ - `aarch64-apple-darwin`
52
+ - `x86_64-unknown-linux-gnu`
53
+ - `aarch64-unknown-linux-gnu`
54
+
55
+ As a caveat, CMake generates the `automerge.h` header file in terms of the
56
+ processor architecture of the computer on which it was built so, for example,
57
+ don't use a header generated for a 64-bit processor if your target is a 32-bit
58
+ processor.
59
+
60
+ # Unicode indexing
61
+
62
+ By default automerge-c expects string indices to be given in terms of UTF-8 byte
63
+ offsets so, for example, the length of "😀" (U+1F600) is 4.
64
+
65
+ If instead you need string indices to be given in terms of Unicode code point
66
+ offsets such that the length of "😀" (U+1F600) will be 1, build it like so:
67
+
68
+ `cmake -S automerge-c -B automerge-c/build -DUTF32_INDEXING=true`
69
+
70
+ Regardless of the specified encoding for character indices, automerge-c always
71
+ requires a string to be provided as an `AMbyteSpan` struct that references an
72
+ array of valid UTF-8 code points.
73
+
74
+ # Usage
75
+
76
+ You can build and view the C API's HTML reference documentation like so:
77
+
78
+ ```shell
79
+ cmake -E make_directory automerge-c/build
80
+ cmake -S automerge-c -B automerge-c/build
81
+ cmake --build automerge-c/build --target automerge_docs
82
+ firefox automerge-c/build/docs/html/index.html
83
+ ```
84
+
85
+ To get started quickly, look at the
86
+ [examples](https://github.com/automerge/automerge/tree/main/rust/automerge-c/examples).
87
+
88
+ Almost all operations in automerge-c act on an Automerge document
89
+ (`AMdoc` struct) which is structurally similar to a JSON document.
90
+
91
+ You can get a document by calling either `AMcreate()` or `AMload()`. Operations
92
+ on a given document are not thread-safe so you must use a mutex or similar to
93
+ avoid calling more than one function on the same one concurrently.
94
+
95
+ A C API function that could succeed or fail returns a result (`AMresult` struct)
96
+ containing a status code (`AMstatus` enum) and either a sequence of at least one
97
+ item (`AMitem` struct) or a read-only view onto a UTF-8 error message string
98
+ (`AMbyteSpan` struct).
99
+ An item contains up to three components: an index within its parent object
100
+ (`AMbyteSpan` struct or `size_t`), a unique identifier (`AMobjId` struct) and a
101
+ value.
102
+ The result of a successful function call that doesn't produce any values will
103
+ contain a single item that is void (`AM_VAL_TYPE_VOID`).
104
+ A returned result **must** be passed to `AMresultFree()` once the item(s) or
105
+ error message it contains is no longer needed in order to avoid a memory leak.
106
+
107
+ ```
108
+ #include <stdio.h>
109
+ #include <stdlib.h>
110
+ #include <automerge-c/automerge.h>
111
+ #include <automerge-c/utils/string.h>
112
+
113
+ int main(int argc, char** argv) {
114
+ AMresult *docResult = AMcreate(NULL);
115
+
116
+ if (AMresultStatus(docResult) != AM_STATUS_OK) {
117
+ char* const err_msg = AMstrdup(AMresultError(docResult), NULL);
118
+ printf("failed to create doc: %s", err_msg);
119
+ free(err_msg);
120
+ goto cleanup;
121
+ }
122
+
123
+ AMdoc *doc;
124
+ AMitemToDoc(AMresultItem(docResult), &doc);
125
+
126
+ // useful code goes here!
127
+
128
+ cleanup:
129
+ AMresultFree(docResult);
130
+ }
131
+ ```
132
+
133
+ If you are writing an application in C, the `AMstackItem()`, `AMstackItems()`
134
+ and `AMstackResult()` functions enable the lifetimes of anonymous results to be
135
+ centrally managed and allow the same validation logic to be reused without
136
+ relying upon the `goto` statement (see examples/quickstart.c).
137
+
138
+ If you are wrapping automerge-c in another language, particularly one that has a
139
+ garbage collector, you can call the `AMresultFree()` function within a finalizer
140
+ to ensure that memory is reclaimed when it is no longer needed.
141
+
142
+ An Automerge document consists of a mutable root which is always a map from
143
+ string keys to values. A value can be one of the following types:
144
+
145
+ - A number of type double / int64_t / uint64_t
146
+ - An explicit true / false / null
147
+ - An immutable UTF-8 string (`AMbyteSpan` struct).
148
+ - An immutable array of arbitrary bytes (`AMbyteSpan` struct).
149
+ - A mutable map from string keys to values.
150
+ - A mutable list of values.
151
+ - A mutable UTF-8 string.
152
+
153
+ If you read from a location in the document with no value, an item with type
154
+ `AM_VAL_TYPE_VOID` will be returned, but you cannot write such a value
155
+ explicitly.
156
+
157
+ Under the hood, automerge references a mutable object by its object identifier
158
+ where `AM_ROOT` signifies a document's root map object.
159
+
160
+ There are functions to put each type of value into either a map or a list, and
161
+ functions to read the current or a historical value from a map or a list. As
162
+ (in general) collaborators may edit the document at any time, you cannot
163
+ guarantee that the type of the value at a given part of the document will stay
164
+ the same. As a result, reading from the document will return an `AMitem` struct
165
+ that you can inspect to determine the type of value that it contains.
166
+
167
+ Strings in automerge-c are represented using an `AMbyteSpan` struct which
168
+ contains a pointer and a length. Strings must be valid UTF-8 and may contain
169
+ NUL (`0`) characters.
170
+ For your convenience, you can call `AMstr()` to get an `AMbyteSpan` struct
171
+ referencing a null-terminated byte string or `AMstrdup()` to get the
172
+ representation of an `AMbyteSpan` struct as a null-terminated byte string
173
+ wherein its NUL characters have been removed/replaced as you choose.
174
+
175
+ Putting all of that together, to read and write from the root of the document
176
+ you can do this:
177
+
178
+ ```
179
+ #include <stdio.h>
180
+ #include <stdlib.h>
181
+ #include <automerge-c/automerge.h>
182
+ #include <automerge-c/utils/string.h>
183
+
184
+ int main(int argc, char** argv) {
185
+ // ...previous example...
186
+ AMdoc *doc;
187
+ AMitemToDoc(AMresultItem(docResult), &doc);
188
+
189
+ AMresult *putResult = AMmapPutStr(doc, AM_ROOT, AMstr("key"), AMstr("value"));
190
+ if (AMresultStatus(putResult) != AM_STATUS_OK) {
191
+ char* const err_msg = AMstrdup(AMresultError(putResult), NULL);
192
+ printf("failed to put: %s", err_msg);
193
+ free(err_msg);
194
+ goto cleanup;
195
+ }
196
+
197
+ AMresult *getResult = AMmapGet(doc, AM_ROOT, AMstr("key"), NULL);
198
+ if (AMresultStatus(getResult) != AM_STATUS_OK) {
199
+ char* const err_msg = AMstrdup(AMresultError(getResult), NULL);
200
+ printf("failed to get: %s", err_msg);
201
+ free(err_msg);
202
+ goto cleanup;
203
+ }
204
+
205
+ AMbyteSpan got;
206
+ if (AMitemToStr(AMresultItem(getResult), &got)) {
207
+ char* const c_str = AMstrdup(got, NULL);
208
+ printf("Got %zu-character string \"%s\"", got.count, c_str);
209
+ free(c_str);
210
+ } else {
211
+ printf("expected to read a string!");
212
+ goto cleanup;
213
+ }
214
+
215
+
216
+ cleanup:
217
+ AMresultFree(getResult);
218
+ AMresultFree(putResult);
219
+ AMresultFree(docResult);
220
+ }
221
+ ```
222
+
223
+ Functions that do not return an `AMresult` (for example `AMitemKey()`) do
224
+ not allocate memory but rather reference memory that was previously
225
+ allocated. It's therefore important to keep the original `AMresult` alive (in
226
+ this case the one returned by `AMmapRange()`) until after you are finished with
227
+ the items that it contains. However, the memory for an individual `AMitem` can
228
+ be shared with a new `AMresult` by calling `AMitemResult()` on it. In other
229
+ words, a select group of items can be filtered out of a collection and only each
230
+ one's corresponding `AMresult` must be kept alive from that point forward; the
231
+ originating collection's `AMresult` can be safely freed.
232
+
233
+ Beyond that, good luck!