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,2177 @@
1
+ use am::marks::Mark;
2
+ use automerge as am;
3
+
4
+ use std::any::type_name;
5
+ use std::borrow::Cow;
6
+ use std::cell::{RefCell, UnsafeCell};
7
+ use std::rc::Rc;
8
+
9
+ use crate::actor_id::AMactorId;
10
+ use crate::byte_span::{to_str, AMbyteSpan};
11
+ use crate::change::AMchange;
12
+ use crate::cursor::AMcursor;
13
+ use crate::doc::mark::AMmark;
14
+ use crate::doc::AMdoc;
15
+ use crate::index::{AMidxType, AMindex};
16
+ use crate::obj::AMobjId;
17
+ use crate::result::{to_result, AMresult};
18
+ use crate::sync::{AMsyncHave, AMsyncMessage, AMsyncState};
19
+
20
+ /// \struct AMunknownValue
21
+ /// \installed_headerfile
22
+ /// \brief A value (typically for a `set` operation) whose type is unknown.
23
+ #[derive(Default, Eq, PartialEq)]
24
+ #[repr(C)]
25
+ pub struct AMunknownValue {
26
+ /// The value's raw bytes.
27
+ bytes: AMbyteSpan,
28
+ /// The value's encoded type identifier.
29
+ type_code: u8,
30
+ }
31
+
32
+ #[allow(clippy::large_enum_variant)]
33
+ pub enum Value {
34
+ ActorId(am::ActorId, UnsafeCell<Option<AMactorId>>),
35
+ Change(Box<am::Change>, UnsafeCell<Option<AMchange>>),
36
+ ChangeHash(am::ChangeHash),
37
+ Cursor(AMcursor),
38
+ Doc(RefCell<AMdoc>),
39
+ Mark(AMmark),
40
+ SyncHave(AMsyncHave),
41
+ SyncMessage(AMsyncMessage),
42
+ SyncState(RefCell<AMsyncState>),
43
+ #[allow(clippy::enum_variant_names)]
44
+ Value(am::Value<'static>),
45
+ }
46
+
47
+ impl Value {
48
+ fn try_into_bytes(&self) -> Result<AMbyteSpan, am::AutomergeError> {
49
+ use am::AutomergeError::InvalidValueType;
50
+ use am::ScalarValue::*;
51
+ use am::Value::*;
52
+
53
+ if let Self::Value(Scalar(scalar)) = &self {
54
+ if let Bytes(vector) = scalar.as_ref() {
55
+ return Ok(vector.as_slice().into());
56
+ }
57
+ }
58
+ Err(InvalidValueType {
59
+ expected: type_name::<AMbyteSpan>().to_string(),
60
+ unexpected: type_name::<self::Value>().to_string(),
61
+ })
62
+ }
63
+
64
+ fn try_into_change_hash(&self) -> Result<AMbyteSpan, am::AutomergeError> {
65
+ use am::AutomergeError::InvalidValueType;
66
+
67
+ if let Self::ChangeHash(change_hash) = &self {
68
+ return Ok(change_hash.into());
69
+ }
70
+ Err(InvalidValueType {
71
+ expected: type_name::<AMbyteSpan>().to_string(),
72
+ unexpected: type_name::<self::Value>().to_string(),
73
+ })
74
+ }
75
+
76
+ fn try_into_counter(&self) -> Result<i64, am::AutomergeError> {
77
+ use am::AutomergeError::InvalidValueType;
78
+ use am::ScalarValue::*;
79
+ use am::Value::*;
80
+
81
+ if let Self::Value(Scalar(scalar)) = &self {
82
+ if let Counter(counter) = scalar.as_ref() {
83
+ return Ok(counter.into());
84
+ }
85
+ }
86
+ Err(InvalidValueType {
87
+ expected: type_name::<i64>().to_string(),
88
+ unexpected: type_name::<self::Value>().to_string(),
89
+ })
90
+ }
91
+
92
+ fn try_into_int(&self) -> Result<i64, am::AutomergeError> {
93
+ use am::AutomergeError::InvalidValueType;
94
+ use am::ScalarValue::*;
95
+ use am::Value::*;
96
+
97
+ if let Self::Value(Scalar(scalar)) = &self {
98
+ if let Int(int) = scalar.as_ref() {
99
+ return Ok(*int);
100
+ }
101
+ }
102
+ Err(InvalidValueType {
103
+ expected: type_name::<i64>().to_string(),
104
+ unexpected: type_name::<self::Value>().to_string(),
105
+ })
106
+ }
107
+
108
+ fn try_into_str(&self) -> Result<AMbyteSpan, am::AutomergeError> {
109
+ use am::AutomergeError::InvalidValueType;
110
+ use am::ScalarValue::*;
111
+ use am::Value::*;
112
+
113
+ if let Self::Value(Scalar(scalar)) = &self {
114
+ if let Str(smol_str) = scalar.as_ref() {
115
+ return Ok(smol_str.into());
116
+ }
117
+ }
118
+ Err(InvalidValueType {
119
+ expected: type_name::<AMbyteSpan>().to_string(),
120
+ unexpected: type_name::<self::Value>().to_string(),
121
+ })
122
+ }
123
+
124
+ fn try_into_timestamp(&self) -> Result<i64, am::AutomergeError> {
125
+ use am::AutomergeError::InvalidValueType;
126
+ use am::ScalarValue::*;
127
+ use am::Value::*;
128
+
129
+ if let Self::Value(Scalar(scalar)) = &self {
130
+ if let Timestamp(timestamp) = scalar.as_ref() {
131
+ return Ok(*timestamp);
132
+ }
133
+ }
134
+ Err(InvalidValueType {
135
+ expected: type_name::<i64>().to_string(),
136
+ unexpected: type_name::<self::Value>().to_string(),
137
+ })
138
+ }
139
+ }
140
+
141
+ impl From<am::ActorId> for Value {
142
+ fn from(actor_id: am::ActorId) -> Self {
143
+ Self::ActorId(actor_id, Default::default())
144
+ }
145
+ }
146
+
147
+ impl From<am::AutoCommit> for Value {
148
+ fn from(auto_commit: am::AutoCommit) -> Self {
149
+ Self::Doc(RefCell::new(AMdoc::new(auto_commit)))
150
+ }
151
+ }
152
+
153
+ impl From<am::Change> for Value {
154
+ fn from(change: am::Change) -> Self {
155
+ Self::Change(Box::new(change), Default::default())
156
+ }
157
+ }
158
+
159
+ impl From<am::ChangeHash> for Value {
160
+ fn from(change_hash: am::ChangeHash) -> Self {
161
+ Self::ChangeHash(change_hash)
162
+ }
163
+ }
164
+
165
+ impl From<am::Cursor> for Value {
166
+ fn from(cursor: am::Cursor) -> Self {
167
+ Self::Cursor(AMcursor::new(cursor))
168
+ }
169
+ }
170
+
171
+ impl From<&am::ScalarValue> for Value {
172
+ fn from(value: &am::ScalarValue) -> Self {
173
+ Self::Value(am::Value::Scalar(Cow::Owned(value.clone())))
174
+ }
175
+ }
176
+
177
+ impl From<am::sync::Have> for Value {
178
+ fn from(have: am::sync::Have) -> Self {
179
+ Self::SyncHave(AMsyncHave::new(have))
180
+ }
181
+ }
182
+
183
+ impl From<am::sync::Message> for Value {
184
+ fn from(message: am::sync::Message) -> Self {
185
+ Self::SyncMessage(AMsyncMessage::new(message))
186
+ }
187
+ }
188
+
189
+ impl From<am::sync::State> for Value {
190
+ fn from(state: am::sync::State) -> Self {
191
+ Self::SyncState(RefCell::new(AMsyncState::new(state)))
192
+ }
193
+ }
194
+
195
+ impl From<am::Value<'static>> for Value {
196
+ fn from(value: am::Value<'static>) -> Self {
197
+ Self::Value(value)
198
+ }
199
+ }
200
+
201
+ impl From<am::ValueRef<'_>> for Value {
202
+ fn from(value: am::ValueRef<'_>) -> Self {
203
+ Self::Value(value.into())
204
+ }
205
+ }
206
+
207
+ impl From<Mark> for Value {
208
+ fn from(mark: Mark) -> Self {
209
+ Self::Mark(AMmark::new(mark))
210
+ }
211
+ }
212
+
213
+ impl From<String> for Value {
214
+ fn from(string: String) -> Self {
215
+ Self::Value(am::Value::Scalar(Cow::Owned(am::ScalarValue::Str(
216
+ string.into(),
217
+ ))))
218
+ }
219
+ }
220
+
221
+ impl<'a> TryFrom<&'a Value> for &'a am::Change {
222
+ type Error = am::AutomergeError;
223
+
224
+ fn try_from(value: &'a Value) -> Result<Self, Self::Error> {
225
+ use self::Value::*;
226
+ use am::AutomergeError::InvalidValueType;
227
+
228
+ match value {
229
+ Change(change, _) => Ok(change),
230
+ _ => Err(InvalidValueType {
231
+ expected: type_name::<Self>().to_string(),
232
+ unexpected: type_name::<self::Value>().to_string(),
233
+ }),
234
+ }
235
+ }
236
+ }
237
+
238
+ impl<'a> TryFrom<&'a Value> for &'a am::ChangeHash {
239
+ type Error = am::AutomergeError;
240
+
241
+ fn try_from(value: &'a Value) -> Result<Self, Self::Error> {
242
+ use self::Value::*;
243
+ use am::AutomergeError::InvalidValueType;
244
+
245
+ match value {
246
+ ChangeHash(change_hash) => Ok(change_hash),
247
+ _ => Err(InvalidValueType {
248
+ expected: type_name::<Self>().to_string(),
249
+ unexpected: type_name::<self::Value>().to_string(),
250
+ }),
251
+ }
252
+ }
253
+ }
254
+
255
+ impl<'a> TryFrom<&'a Value> for &'a AMcursor {
256
+ type Error = am::AutomergeError;
257
+
258
+ fn try_from(value: &'a Value) -> Result<Self, Self::Error> {
259
+ use self::Value::*;
260
+ use am::AutomergeError::InvalidValueType;
261
+
262
+ match value {
263
+ Cursor(cursor) => Ok(cursor),
264
+ _ => Err(InvalidValueType {
265
+ expected: type_name::<Self>().to_string(),
266
+ unexpected: type_name::<self::Value>().to_string(),
267
+ }),
268
+ }
269
+ }
270
+ }
271
+
272
+ impl<'a> TryFrom<&'a Value> for &'a am::ScalarValue {
273
+ type Error = am::AutomergeError;
274
+
275
+ fn try_from(value: &'a Value) -> Result<Self, Self::Error> {
276
+ use self::Value::*;
277
+ use am::AutomergeError::InvalidValueType;
278
+ use am::Value::*;
279
+
280
+ if let Value(Scalar(scalar)) = value {
281
+ return Ok(scalar.as_ref());
282
+ }
283
+ Err(InvalidValueType {
284
+ expected: type_name::<Self>().to_string(),
285
+ unexpected: type_name::<self::Value>().to_string(),
286
+ })
287
+ }
288
+ }
289
+
290
+ impl<'a> TryFrom<&'a Value> for &'a AMactorId {
291
+ type Error = am::AutomergeError;
292
+
293
+ fn try_from(value: &'a Value) -> Result<Self, Self::Error> {
294
+ use self::Value::*;
295
+ use am::AutomergeError::InvalidValueType;
296
+
297
+ match value {
298
+ ActorId(actor_id, c_actor_id) => unsafe {
299
+ Ok((*c_actor_id.get()).get_or_insert(AMactorId::new(actor_id)))
300
+ },
301
+ _ => Err(InvalidValueType {
302
+ expected: type_name::<Self>().to_string(),
303
+ unexpected: type_name::<self::Value>().to_string(),
304
+ }),
305
+ }
306
+ }
307
+ }
308
+
309
+ impl<'a> TryFrom<&'a mut Value> for &'a mut AMchange {
310
+ type Error = am::AutomergeError;
311
+
312
+ fn try_from(value: &'a mut Value) -> Result<Self, Self::Error> {
313
+ use self::Value::*;
314
+ use am::AutomergeError::InvalidValueType;
315
+
316
+ match value {
317
+ Change(change, c_change) => unsafe {
318
+ Ok((*c_change.get()).get_or_insert(AMchange::new(change)))
319
+ },
320
+ _ => Err(InvalidValueType {
321
+ expected: type_name::<Self>().to_string(),
322
+ unexpected: type_name::<self::Value>().to_string(),
323
+ }),
324
+ }
325
+ }
326
+ }
327
+
328
+ impl<'a> TryFrom<&'a mut Value> for &'a mut AMdoc {
329
+ type Error = am::AutomergeError;
330
+
331
+ fn try_from(value: &'a mut Value) -> Result<Self, Self::Error> {
332
+ use self::Value::*;
333
+ use am::AutomergeError::InvalidValueType;
334
+
335
+ match value {
336
+ Doc(doc) => Ok(doc.get_mut()),
337
+ _ => Err(InvalidValueType {
338
+ expected: type_name::<Self>().to_string(),
339
+ unexpected: type_name::<self::Value>().to_string(),
340
+ }),
341
+ }
342
+ }
343
+ }
344
+
345
+ impl<'a> TryFrom<&'a Value> for &'a AMsyncHave {
346
+ type Error = am::AutomergeError;
347
+
348
+ fn try_from(value: &'a Value) -> Result<Self, Self::Error> {
349
+ use self::Value::*;
350
+ use am::AutomergeError::InvalidValueType;
351
+
352
+ match value {
353
+ SyncHave(sync_have) => Ok(sync_have),
354
+ _ => Err(InvalidValueType {
355
+ expected: type_name::<Self>().to_string(),
356
+ unexpected: type_name::<self::Value>().to_string(),
357
+ }),
358
+ }
359
+ }
360
+ }
361
+
362
+ impl<'a> TryFrom<&'a Value> for &'a AMsyncMessage {
363
+ type Error = am::AutomergeError;
364
+
365
+ fn try_from(value: &'a Value) -> Result<Self, Self::Error> {
366
+ use self::Value::*;
367
+ use am::AutomergeError::InvalidValueType;
368
+
369
+ match value {
370
+ SyncMessage(sync_message) => Ok(sync_message),
371
+ _ => Err(InvalidValueType {
372
+ expected: type_name::<Self>().to_string(),
373
+ unexpected: type_name::<self::Value>().to_string(),
374
+ }),
375
+ }
376
+ }
377
+ }
378
+
379
+ impl<'a> TryFrom<&'a mut Value> for &'a mut AMsyncState {
380
+ type Error = am::AutomergeError;
381
+
382
+ fn try_from(value: &'a mut Value) -> Result<Self, Self::Error> {
383
+ use self::Value::*;
384
+ use am::AutomergeError::InvalidValueType;
385
+
386
+ match value {
387
+ SyncState(sync_state) => Ok(sync_state.get_mut()),
388
+ _ => Err(InvalidValueType {
389
+ expected: type_name::<Self>().to_string(),
390
+ unexpected: type_name::<self::Value>().to_string(),
391
+ }),
392
+ }
393
+ }
394
+ }
395
+
396
+ impl TryFrom<&Value> for bool {
397
+ type Error = am::AutomergeError;
398
+
399
+ fn try_from(value: &Value) -> Result<Self, Self::Error> {
400
+ use self::Value::*;
401
+ use am::AutomergeError::InvalidValueType;
402
+ use am::ScalarValue::*;
403
+ use am::Value::*;
404
+
405
+ if let Value(Scalar(scalar)) = value {
406
+ if let Boolean(boolean) = scalar.as_ref() {
407
+ return Ok(*boolean);
408
+ }
409
+ }
410
+ Err(InvalidValueType {
411
+ expected: type_name::<Self>().to_string(),
412
+ unexpected: type_name::<self::Value>().to_string(),
413
+ })
414
+ }
415
+ }
416
+
417
+ impl TryFrom<&Value> for f64 {
418
+ type Error = am::AutomergeError;
419
+
420
+ fn try_from(value: &Value) -> Result<Self, Self::Error> {
421
+ use self::Value::*;
422
+ use am::AutomergeError::InvalidValueType;
423
+ use am::ScalarValue::*;
424
+ use am::Value::*;
425
+
426
+ if let Value(Scalar(scalar)) = value {
427
+ if let F64(float) = scalar.as_ref() {
428
+ return Ok(*float);
429
+ }
430
+ }
431
+ Err(InvalidValueType {
432
+ expected: type_name::<Self>().to_string(),
433
+ unexpected: type_name::<self::Value>().to_string(),
434
+ })
435
+ }
436
+ }
437
+
438
+ impl TryFrom<&Value> for u64 {
439
+ type Error = am::AutomergeError;
440
+
441
+ fn try_from(value: &Value) -> Result<Self, Self::Error> {
442
+ use self::Value::*;
443
+ use am::AutomergeError::InvalidValueType;
444
+ use am::ScalarValue::*;
445
+ use am::Value::*;
446
+
447
+ if let Value(Scalar(scalar)) = value {
448
+ if let Uint(uint) = scalar.as_ref() {
449
+ return Ok(*uint);
450
+ }
451
+ }
452
+ Err(InvalidValueType {
453
+ expected: type_name::<Self>().to_string(),
454
+ unexpected: type_name::<self::Value>().to_string(),
455
+ })
456
+ }
457
+ }
458
+
459
+ impl TryFrom<&Value> for AMunknownValue {
460
+ type Error = am::AutomergeError;
461
+
462
+ fn try_from(value: &Value) -> Result<Self, Self::Error> {
463
+ use self::Value::*;
464
+ use am::AutomergeError::InvalidValueType;
465
+ use am::ScalarValue::*;
466
+ use am::Value::*;
467
+
468
+ if let Value(Scalar(scalar)) = value {
469
+ if let Unknown { bytes, type_code } = scalar.as_ref() {
470
+ return Ok(Self {
471
+ bytes: bytes.as_slice().into(),
472
+ type_code: *type_code,
473
+ });
474
+ }
475
+ }
476
+ Err(InvalidValueType {
477
+ expected: type_name::<Self>().to_string(),
478
+ unexpected: type_name::<self::Value>().to_string(),
479
+ })
480
+ }
481
+ }
482
+
483
+ impl<'a> TryFrom<&'a Value> for &'a AMmark {
484
+ type Error = am::AutomergeError;
485
+
486
+ fn try_from(value: &'a Value) -> Result<Self, Self::Error> {
487
+ use self::Value::*;
488
+ use am::AutomergeError::InvalidValueType;
489
+
490
+ match value {
491
+ Mark(mark) => Ok(mark),
492
+ _ => Err(InvalidValueType {
493
+ expected: type_name::<Self>().to_string(),
494
+ unexpected: type_name::<self::Value>().to_string(),
495
+ }),
496
+ }
497
+ }
498
+ }
499
+
500
+ impl PartialEq for Value {
501
+ fn eq(&self, other: &Self) -> bool {
502
+ use self::Value::*;
503
+
504
+ match (self, other) {
505
+ (ActorId(lhs, _), ActorId(rhs, _)) => *lhs == *rhs,
506
+ (Change(lhs, _), Change(rhs, _)) => lhs == rhs,
507
+ (ChangeHash(lhs), ChangeHash(rhs)) => lhs == rhs,
508
+ (Doc(lhs), Doc(rhs)) => lhs.as_ptr() == rhs.as_ptr(),
509
+ (SyncMessage(lhs), SyncMessage(rhs)) => *lhs == *rhs,
510
+ (SyncState(lhs), SyncState(rhs)) => *lhs == *rhs,
511
+ (Value(lhs), Value(rhs)) => lhs == rhs,
512
+ _ => false,
513
+ }
514
+ }
515
+ }
516
+
517
+ #[derive(Default)]
518
+ pub struct Item {
519
+ /// The item's index.
520
+ index: Option<AMindex>,
521
+ /// The item's identifier.
522
+ obj_id: Option<AMobjId>,
523
+ /// The item's value.
524
+ value: Option<Value>,
525
+ }
526
+
527
+ impl Item {
528
+ fn try_into_bytes(&self) -> Result<AMbyteSpan, am::AutomergeError> {
529
+ use am::AutomergeError::InvalidValueType;
530
+
531
+ if let Some(value) = &self.value {
532
+ return value.try_into_bytes();
533
+ }
534
+ Err(InvalidValueType {
535
+ expected: type_name::<AMbyteSpan>().to_string(),
536
+ unexpected: type_name::<Option<Value>>().to_string(),
537
+ })
538
+ }
539
+
540
+ fn try_into_change_hash(&self) -> Result<AMbyteSpan, am::AutomergeError> {
541
+ use am::AutomergeError::InvalidValueType;
542
+
543
+ if let Some(value) = &self.value {
544
+ return value.try_into_change_hash();
545
+ }
546
+ Err(InvalidValueType {
547
+ expected: type_name::<AMbyteSpan>().to_string(),
548
+ unexpected: type_name::<Option<Value>>().to_string(),
549
+ })
550
+ }
551
+
552
+ fn try_into_counter(&self) -> Result<i64, am::AutomergeError> {
553
+ use am::AutomergeError::InvalidValueType;
554
+
555
+ if let Some(value) = &self.value {
556
+ return value.try_into_counter();
557
+ }
558
+ Err(InvalidValueType {
559
+ expected: type_name::<i64>().to_string(),
560
+ unexpected: type_name::<Option<Value>>().to_string(),
561
+ })
562
+ }
563
+
564
+ fn try_into_int(&self) -> Result<i64, am::AutomergeError> {
565
+ use am::AutomergeError::InvalidValueType;
566
+
567
+ if let Some(value) = &self.value {
568
+ return value.try_into_int();
569
+ }
570
+ Err(InvalidValueType {
571
+ expected: type_name::<i64>().to_string(),
572
+ unexpected: type_name::<Option<Value>>().to_string(),
573
+ })
574
+ }
575
+
576
+ fn try_into_str(&self) -> Result<AMbyteSpan, am::AutomergeError> {
577
+ use am::AutomergeError::InvalidValueType;
578
+
579
+ if let Some(value) = &self.value {
580
+ return value.try_into_str();
581
+ }
582
+ Err(InvalidValueType {
583
+ expected: type_name::<AMbyteSpan>().to_string(),
584
+ unexpected: type_name::<Option<Value>>().to_string(),
585
+ })
586
+ }
587
+
588
+ fn try_into_timestamp(&self) -> Result<i64, am::AutomergeError> {
589
+ use am::AutomergeError::InvalidValueType;
590
+
591
+ if let Some(value) = &self.value {
592
+ return value.try_into_timestamp();
593
+ }
594
+ Err(InvalidValueType {
595
+ expected: type_name::<i64>().to_string(),
596
+ unexpected: type_name::<Option<Value>>().to_string(),
597
+ })
598
+ }
599
+ }
600
+
601
+ impl From<am::ActorId> for Item {
602
+ fn from(actor_id: am::ActorId) -> Self {
603
+ Value::from(actor_id).into()
604
+ }
605
+ }
606
+
607
+ impl From<am::AutoCommit> for Item {
608
+ fn from(auto_commit: am::AutoCommit) -> Self {
609
+ Value::from(auto_commit).into()
610
+ }
611
+ }
612
+
613
+ impl From<am::Change> for Item {
614
+ fn from(change: am::Change) -> Self {
615
+ Value::from(change).into()
616
+ }
617
+ }
618
+
619
+ impl From<am::ChangeHash> for Item {
620
+ fn from(change_hash: am::ChangeHash) -> Self {
621
+ Value::from(change_hash).into()
622
+ }
623
+ }
624
+
625
+ impl From<am::Cursor> for Item {
626
+ fn from(cursor: am::Cursor) -> Self {
627
+ Value::from(cursor).into()
628
+ }
629
+ }
630
+
631
+ impl From<(am::ObjId, am::ObjType)> for Item {
632
+ fn from((obj_id, obj_type): (am::ObjId, am::ObjType)) -> Self {
633
+ Self {
634
+ index: None,
635
+ obj_id: Some(AMobjId::new(obj_id)),
636
+ value: Some(am::Value::Object(obj_type).into()),
637
+ }
638
+ }
639
+ }
640
+
641
+ impl From<&am::ScalarValue> for Item {
642
+ fn from(value: &am::ScalarValue) -> Self {
643
+ Value::from(value).into()
644
+ }
645
+ }
646
+
647
+ impl From<am::sync::Have> for Item {
648
+ fn from(have: am::sync::Have) -> Self {
649
+ Value::from(have).into()
650
+ }
651
+ }
652
+
653
+ impl From<am::sync::Message> for Item {
654
+ fn from(message: am::sync::Message) -> Self {
655
+ Value::from(message).into()
656
+ }
657
+ }
658
+
659
+ impl From<am::sync::State> for Item {
660
+ fn from(state: am::sync::State) -> Self {
661
+ Value::from(state).into()
662
+ }
663
+ }
664
+
665
+ impl From<am::Value<'static>> for Item {
666
+ fn from(value: am::Value<'static>) -> Self {
667
+ Value::from(value).into()
668
+ }
669
+ }
670
+
671
+ impl From<Mark> for Item {
672
+ fn from(mark: Mark) -> Self {
673
+ Value::from(mark).into()
674
+ }
675
+ }
676
+
677
+ impl From<String> for Item {
678
+ fn from(string: String) -> Self {
679
+ Value::from(string).into()
680
+ }
681
+ }
682
+
683
+ impl From<Value> for Item {
684
+ fn from(value: Value) -> Self {
685
+ Self {
686
+ index: None,
687
+ obj_id: None,
688
+ value: Some(value),
689
+ }
690
+ }
691
+ }
692
+
693
+ impl PartialEq for Item {
694
+ fn eq(&self, other: &Self) -> bool {
695
+ self.index == other.index && self.obj_id == other.obj_id && self.value == other.value
696
+ }
697
+ }
698
+
699
+ impl<'a> TryFrom<&'a Item> for &'a am::Change {
700
+ type Error = am::AutomergeError;
701
+
702
+ fn try_from(item: &'a Item) -> Result<Self, Self::Error> {
703
+ use am::AutomergeError::InvalidValueType;
704
+
705
+ if let Some(value) = &item.value {
706
+ value.try_into()
707
+ } else {
708
+ Err(InvalidValueType {
709
+ expected: type_name::<Self>().to_string(),
710
+ unexpected: type_name::<Option<Value>>().to_string(),
711
+ })
712
+ }
713
+ }
714
+ }
715
+
716
+ impl<'a> TryFrom<&'a Item> for &'a am::ChangeHash {
717
+ type Error = am::AutomergeError;
718
+
719
+ fn try_from(item: &'a Item) -> Result<Self, Self::Error> {
720
+ use am::AutomergeError::InvalidValueType;
721
+
722
+ if let Some(value) = &item.value {
723
+ value.try_into()
724
+ } else {
725
+ Err(InvalidValueType {
726
+ expected: type_name::<Self>().to_string(),
727
+ unexpected: type_name::<Option<Value>>().to_string(),
728
+ })
729
+ }
730
+ }
731
+ }
732
+
733
+ impl<'a> TryFrom<&'a Item> for &'a am::ScalarValue {
734
+ type Error = am::AutomergeError;
735
+
736
+ fn try_from(item: &'a Item) -> Result<Self, Self::Error> {
737
+ use am::AutomergeError::InvalidValueType;
738
+
739
+ if let Some(value) = &item.value {
740
+ value.try_into()
741
+ } else {
742
+ Err(InvalidValueType {
743
+ expected: type_name::<Self>().to_string(),
744
+ unexpected: type_name::<Option<Value>>().to_string(),
745
+ })
746
+ }
747
+ }
748
+ }
749
+
750
+ impl<'a> TryFrom<&'a Item> for &'a AMactorId {
751
+ type Error = am::AutomergeError;
752
+
753
+ fn try_from(item: &'a Item) -> Result<Self, Self::Error> {
754
+ use am::AutomergeError::InvalidValueType;
755
+
756
+ if let Some(value) = &item.value {
757
+ value.try_into()
758
+ } else {
759
+ Err(InvalidValueType {
760
+ expected: type_name::<Self>().to_string(),
761
+ unexpected: type_name::<Option<Value>>().to_string(),
762
+ })
763
+ }
764
+ }
765
+ }
766
+
767
+ impl<'a> TryFrom<&'a mut Item> for &'a mut AMchange {
768
+ type Error = am::AutomergeError;
769
+
770
+ fn try_from(item: &'a mut Item) -> Result<Self, Self::Error> {
771
+ use am::AutomergeError::InvalidValueType;
772
+
773
+ if let Some(value) = &mut item.value {
774
+ value.try_into()
775
+ } else {
776
+ Err(InvalidValueType {
777
+ expected: type_name::<Self>().to_string(),
778
+ unexpected: type_name::<Option<Value>>().to_string(),
779
+ })
780
+ }
781
+ }
782
+ }
783
+ impl<'a> TryFrom<&'a Item> for &'a AMcursor {
784
+ type Error = am::AutomergeError;
785
+
786
+ fn try_from(item: &'a Item) -> Result<Self, Self::Error> {
787
+ use am::AutomergeError::InvalidValueType;
788
+
789
+ if let Some(value) = &item.value {
790
+ value.try_into()
791
+ } else {
792
+ Err(InvalidValueType {
793
+ expected: type_name::<Self>().to_string(),
794
+ unexpected: type_name::<Option<Value>>().to_string(),
795
+ })
796
+ }
797
+ }
798
+ }
799
+
800
+ impl<'a> TryFrom<&'a mut Item> for &'a mut AMdoc {
801
+ type Error = am::AutomergeError;
802
+
803
+ fn try_from(item: &'a mut Item) -> Result<Self, Self::Error> {
804
+ use am::AutomergeError::InvalidValueType;
805
+
806
+ if let Some(value) = &mut item.value {
807
+ value.try_into()
808
+ } else {
809
+ Err(InvalidValueType {
810
+ expected: type_name::<Self>().to_string(),
811
+ unexpected: type_name::<Option<Value>>().to_string(),
812
+ })
813
+ }
814
+ }
815
+ }
816
+
817
+ impl From<&Item> for AMidxType {
818
+ fn from(item: &Item) -> Self {
819
+ if let Some(index) = &item.index {
820
+ return index.into();
821
+ }
822
+ Default::default()
823
+ }
824
+ }
825
+
826
+ impl<'a> TryFrom<&'a Item> for &'a AMsyncHave {
827
+ type Error = am::AutomergeError;
828
+
829
+ fn try_from(item: &'a Item) -> Result<Self, Self::Error> {
830
+ use am::AutomergeError::InvalidValueType;
831
+
832
+ if let Some(value) = &item.value {
833
+ value.try_into()
834
+ } else {
835
+ Err(InvalidValueType {
836
+ expected: type_name::<Self>().to_string(),
837
+ unexpected: type_name::<Option<Value>>().to_string(),
838
+ })
839
+ }
840
+ }
841
+ }
842
+
843
+ impl<'a> TryFrom<&'a Item> for &'a AMsyncMessage {
844
+ type Error = am::AutomergeError;
845
+
846
+ fn try_from(item: &'a Item) -> Result<Self, Self::Error> {
847
+ use am::AutomergeError::InvalidValueType;
848
+
849
+ if let Some(value) = &item.value {
850
+ value.try_into()
851
+ } else {
852
+ Err(InvalidValueType {
853
+ expected: type_name::<Self>().to_string(),
854
+ unexpected: type_name::<Option<Value>>().to_string(),
855
+ })
856
+ }
857
+ }
858
+ }
859
+
860
+ impl<'a> TryFrom<&'a mut Item> for &'a mut AMsyncState {
861
+ type Error = am::AutomergeError;
862
+
863
+ fn try_from(item: &'a mut Item) -> Result<Self, Self::Error> {
864
+ use am::AutomergeError::InvalidValueType;
865
+
866
+ if let Some(value) = &mut item.value {
867
+ value.try_into()
868
+ } else {
869
+ Err(InvalidValueType {
870
+ expected: type_name::<Self>().to_string(),
871
+ unexpected: type_name::<Option<Value>>().to_string(),
872
+ })
873
+ }
874
+ }
875
+ }
876
+
877
+ impl<'a> TryFrom<&'a Item> for &'a AMmark {
878
+ type Error = am::AutomergeError;
879
+
880
+ fn try_from(item: &'a Item) -> Result<Self, Self::Error> {
881
+ use am::AutomergeError::InvalidValueType;
882
+
883
+ if let Some(value) = &item.value {
884
+ value.try_into()
885
+ } else {
886
+ Err(InvalidValueType {
887
+ expected: type_name::<Self>().to_string(),
888
+ unexpected: type_name::<Option<Mark>>().to_string(),
889
+ })
890
+ }
891
+ }
892
+ }
893
+
894
+ impl TryFrom<&Item> for bool {
895
+ type Error = am::AutomergeError;
896
+
897
+ fn try_from(item: &Item) -> Result<Self, Self::Error> {
898
+ use am::AutomergeError::InvalidValueType;
899
+
900
+ if let Some(value) = &item.value {
901
+ value.try_into()
902
+ } else {
903
+ Err(InvalidValueType {
904
+ expected: type_name::<Self>().to_string(),
905
+ unexpected: type_name::<Option<Value>>().to_string(),
906
+ })
907
+ }
908
+ }
909
+ }
910
+
911
+ impl TryFrom<&Item> for f64 {
912
+ type Error = am::AutomergeError;
913
+
914
+ fn try_from(item: &Item) -> Result<Self, Self::Error> {
915
+ use am::AutomergeError::InvalidValueType;
916
+
917
+ if let Some(value) = &item.value {
918
+ value.try_into()
919
+ } else {
920
+ Err(InvalidValueType {
921
+ expected: type_name::<Self>().to_string(),
922
+ unexpected: type_name::<Option<Value>>().to_string(),
923
+ })
924
+ }
925
+ }
926
+ }
927
+
928
+ impl TryFrom<&Item> for u64 {
929
+ type Error = am::AutomergeError;
930
+
931
+ fn try_from(item: &Item) -> Result<Self, Self::Error> {
932
+ use am::AutomergeError::InvalidValueType;
933
+
934
+ if let Some(value) = &item.value {
935
+ value.try_into()
936
+ } else {
937
+ Err(InvalidValueType {
938
+ expected: type_name::<Self>().to_string(),
939
+ unexpected: type_name::<Option<Value>>().to_string(),
940
+ })
941
+ }
942
+ }
943
+ }
944
+
945
+ impl TryFrom<&Item> for AMunknownValue {
946
+ type Error = am::AutomergeError;
947
+
948
+ fn try_from(item: &Item) -> Result<Self, Self::Error> {
949
+ use am::AutomergeError::InvalidValueType;
950
+
951
+ if let Some(value) = &item.value {
952
+ value.try_into()
953
+ } else {
954
+ Err(InvalidValueType {
955
+ expected: type_name::<Self>().to_string(),
956
+ unexpected: type_name::<Option<Value>>().to_string(),
957
+ })
958
+ }
959
+ }
960
+ }
961
+
962
+ impl TryFrom<&Item> for (am::Value<'static>, am::ObjId) {
963
+ type Error = am::AutomergeError;
964
+
965
+ fn try_from(item: &Item) -> Result<Self, Self::Error> {
966
+ use self::Value::*;
967
+ use am::AutomergeError::InvalidObjId;
968
+ use am::AutomergeError::InvalidValueType;
969
+
970
+ let expected = type_name::<am::Value>().to_string();
971
+ match (&item.obj_id, &item.value) {
972
+ (None, None) | (None, Some(_)) => Err(InvalidObjId("".to_string())),
973
+ (Some(_), None) => Err(InvalidValueType {
974
+ expected,
975
+ unexpected: type_name::<Option<am::Value>>().to_string(),
976
+ }),
977
+ (Some(obj_id), Some(value)) => match value {
978
+ ActorId(_, _) => Err(InvalidValueType {
979
+ expected,
980
+ unexpected: type_name::<AMactorId>().to_string(),
981
+ }),
982
+ ChangeHash(_) => Err(InvalidValueType {
983
+ expected,
984
+ unexpected: type_name::<am::ChangeHash>().to_string(),
985
+ }),
986
+ Change(_, _) => Err(InvalidValueType {
987
+ expected,
988
+ unexpected: type_name::<AMchange>().to_string(),
989
+ }),
990
+ Cursor(_) => Err(InvalidValueType {
991
+ expected,
992
+ unexpected: type_name::<AMcursor>().to_string(),
993
+ }),
994
+ Doc(_) => Err(InvalidValueType {
995
+ expected,
996
+ unexpected: type_name::<AMdoc>().to_string(),
997
+ }),
998
+ Mark(_) => Err(InvalidValueType {
999
+ expected,
1000
+ unexpected: type_name::<AMmark>().to_string(),
1001
+ }),
1002
+ SyncHave(_) => Err(InvalidValueType {
1003
+ expected,
1004
+ unexpected: type_name::<AMsyncHave>().to_string(),
1005
+ }),
1006
+ SyncMessage(_) => Err(InvalidValueType {
1007
+ expected,
1008
+ unexpected: type_name::<AMsyncMessage>().to_string(),
1009
+ }),
1010
+ SyncState(_) => Err(InvalidValueType {
1011
+ expected,
1012
+ unexpected: type_name::<AMsyncState>().to_string(),
1013
+ }),
1014
+ Value(v) => Ok((v.clone(), obj_id.as_ref().clone())),
1015
+ },
1016
+ }
1017
+ }
1018
+ }
1019
+
1020
+ /// \struct AMitem
1021
+ /// \installed_headerfile
1022
+ /// \brief An item within a result.
1023
+ #[derive(Clone)]
1024
+ pub struct AMitem(Rc<Item>);
1025
+
1026
+ impl AMitem {
1027
+ pub fn exact(obj_id: am::ObjId, value: Value) -> Self {
1028
+ Self(Rc::new(Item {
1029
+ index: None,
1030
+ obj_id: Some(AMobjId::new(obj_id)),
1031
+ value: Some(value),
1032
+ }))
1033
+ }
1034
+
1035
+ pub fn indexed(index: AMindex, obj_id: am::ObjId, value: Value) -> Self {
1036
+ Self(Rc::new(Item {
1037
+ index: Some(index),
1038
+ obj_id: Some(AMobjId::new(obj_id)),
1039
+ value: Some(value),
1040
+ }))
1041
+ }
1042
+ }
1043
+
1044
+ impl AsRef<Item> for AMitem {
1045
+ fn as_ref(&self) -> &Item {
1046
+ self.0.as_ref()
1047
+ }
1048
+ }
1049
+
1050
+ impl Default for AMitem {
1051
+ fn default() -> Self {
1052
+ Self(Rc::new(Item {
1053
+ index: None,
1054
+ obj_id: None,
1055
+ value: None,
1056
+ }))
1057
+ }
1058
+ }
1059
+
1060
+ impl From<am::ActorId> for AMitem {
1061
+ fn from(actor_id: am::ActorId) -> Self {
1062
+ Value::from(actor_id).into()
1063
+ }
1064
+ }
1065
+
1066
+ impl From<am::AutoCommit> for AMitem {
1067
+ fn from(auto_commit: am::AutoCommit) -> Self {
1068
+ Value::from(auto_commit).into()
1069
+ }
1070
+ }
1071
+
1072
+ impl From<am::Change> for AMitem {
1073
+ fn from(change: am::Change) -> Self {
1074
+ Value::from(change).into()
1075
+ }
1076
+ }
1077
+
1078
+ impl From<am::ChangeHash> for AMitem {
1079
+ fn from(change_hash: am::ChangeHash) -> Self {
1080
+ Value::from(change_hash).into()
1081
+ }
1082
+ }
1083
+
1084
+ impl From<am::Cursor> for AMitem {
1085
+ fn from(cursor: am::Cursor) -> Self {
1086
+ Value::from(cursor).into()
1087
+ }
1088
+ }
1089
+
1090
+ impl From<(am::ObjId, am::ObjType)> for AMitem {
1091
+ fn from((obj_id, obj_type): (am::ObjId, am::ObjType)) -> Self {
1092
+ Self(Rc::new(Item::from((obj_id, obj_type))))
1093
+ }
1094
+ }
1095
+
1096
+ impl From<&am::ScalarValue> for AMitem {
1097
+ fn from(value: &am::ScalarValue) -> Self {
1098
+ Value::from(value).into()
1099
+ }
1100
+ }
1101
+
1102
+ impl From<am::sync::Have> for AMitem {
1103
+ fn from(have: am::sync::Have) -> Self {
1104
+ Value::from(have).into()
1105
+ }
1106
+ }
1107
+
1108
+ impl From<am::sync::Message> for AMitem {
1109
+ fn from(message: am::sync::Message) -> Self {
1110
+ Value::from(message).into()
1111
+ }
1112
+ }
1113
+
1114
+ impl From<am::sync::State> for AMitem {
1115
+ fn from(state: am::sync::State) -> Self {
1116
+ Value::from(state).into()
1117
+ }
1118
+ }
1119
+
1120
+ impl From<am::Value<'static>> for AMitem {
1121
+ fn from(value: am::Value<'static>) -> Self {
1122
+ Value::from(value).into()
1123
+ }
1124
+ }
1125
+
1126
+ impl From<Mark> for AMitem {
1127
+ fn from(mark: Mark) -> Self {
1128
+ Value::from(mark).into()
1129
+ }
1130
+ }
1131
+
1132
+ impl From<String> for AMitem {
1133
+ fn from(string: String) -> Self {
1134
+ Value::from(string).into()
1135
+ }
1136
+ }
1137
+
1138
+ impl From<Value> for AMitem {
1139
+ fn from(value: Value) -> Self {
1140
+ Self(Rc::new(Item::from(value)))
1141
+ }
1142
+ }
1143
+
1144
+ impl PartialEq for AMitem {
1145
+ fn eq(&self, other: &Self) -> bool {
1146
+ self.as_ref() == other.as_ref()
1147
+ }
1148
+ }
1149
+
1150
+ impl<'a> TryFrom<&'a AMitem> for &'a am::Change {
1151
+ type Error = am::AutomergeError;
1152
+
1153
+ fn try_from(item: &'a AMitem) -> Result<Self, Self::Error> {
1154
+ item.as_ref().try_into()
1155
+ }
1156
+ }
1157
+
1158
+ impl<'a> TryFrom<&'a AMitem> for &'a am::ChangeHash {
1159
+ type Error = am::AutomergeError;
1160
+
1161
+ fn try_from(item: &'a AMitem) -> Result<Self, Self::Error> {
1162
+ item.as_ref().try_into()
1163
+ }
1164
+ }
1165
+
1166
+ impl<'a> TryFrom<&'a AMitem> for &'a am::ScalarValue {
1167
+ type Error = am::AutomergeError;
1168
+
1169
+ fn try_from(item: &'a AMitem) -> Result<Self, Self::Error> {
1170
+ item.as_ref().try_into()
1171
+ }
1172
+ }
1173
+
1174
+ impl<'a> TryFrom<&'a AMitem> for &'a AMactorId {
1175
+ type Error = am::AutomergeError;
1176
+
1177
+ fn try_from(item: &'a AMitem) -> Result<Self, Self::Error> {
1178
+ item.as_ref().try_into()
1179
+ }
1180
+ }
1181
+
1182
+ impl<'a> TryFrom<&'a mut AMitem> for &'a mut AMchange {
1183
+ type Error = am::AutomergeError;
1184
+
1185
+ fn try_from(item: &'a mut AMitem) -> Result<Self, Self::Error> {
1186
+ if let Some(item) = Rc::get_mut(&mut item.0) {
1187
+ item.try_into()
1188
+ } else {
1189
+ Err(Self::Error::Fail)
1190
+ }
1191
+ }
1192
+ }
1193
+
1194
+ impl<'a> TryFrom<&'a AMitem> for &'a AMcursor {
1195
+ type Error = am::AutomergeError;
1196
+
1197
+ fn try_from(item: &'a AMitem) -> Result<Self, Self::Error> {
1198
+ item.as_ref().try_into()
1199
+ }
1200
+ }
1201
+
1202
+ impl<'a> TryFrom<&'a mut AMitem> for &'a mut AMdoc {
1203
+ type Error = am::AutomergeError;
1204
+
1205
+ fn try_from(item: &'a mut AMitem) -> Result<Self, Self::Error> {
1206
+ if let Some(item) = Rc::get_mut(&mut item.0) {
1207
+ item.try_into()
1208
+ } else {
1209
+ Err(Self::Error::Fail)
1210
+ }
1211
+ }
1212
+ }
1213
+
1214
+ impl<'a> TryFrom<&'a AMitem> for &'a AMmark {
1215
+ type Error = am::AutomergeError;
1216
+
1217
+ fn try_from(item: &'a AMitem) -> Result<Self, Self::Error> {
1218
+ item.as_ref().try_into()
1219
+ }
1220
+ }
1221
+
1222
+ impl<'a> TryFrom<&'a AMitem> for &'a AMsyncHave {
1223
+ type Error = am::AutomergeError;
1224
+
1225
+ fn try_from(item: &'a AMitem) -> Result<Self, Self::Error> {
1226
+ item.as_ref().try_into()
1227
+ }
1228
+ }
1229
+
1230
+ impl<'a> TryFrom<&'a AMitem> for &'a AMsyncMessage {
1231
+ type Error = am::AutomergeError;
1232
+
1233
+ fn try_from(item: &'a AMitem) -> Result<Self, Self::Error> {
1234
+ item.as_ref().try_into()
1235
+ }
1236
+ }
1237
+
1238
+ impl<'a> TryFrom<&'a mut AMitem> for &'a mut AMsyncState {
1239
+ type Error = am::AutomergeError;
1240
+
1241
+ fn try_from(item: &'a mut AMitem) -> Result<Self, Self::Error> {
1242
+ if let Some(item) = Rc::get_mut(&mut item.0) {
1243
+ item.try_into()
1244
+ } else {
1245
+ Err(Self::Error::Fail)
1246
+ }
1247
+ }
1248
+ }
1249
+
1250
+ impl TryFrom<&AMitem> for bool {
1251
+ type Error = am::AutomergeError;
1252
+
1253
+ fn try_from(item: &AMitem) -> Result<Self, Self::Error> {
1254
+ item.as_ref().try_into()
1255
+ }
1256
+ }
1257
+
1258
+ impl TryFrom<&AMitem> for f64 {
1259
+ type Error = am::AutomergeError;
1260
+
1261
+ fn try_from(item: &AMitem) -> Result<Self, Self::Error> {
1262
+ item.as_ref().try_into()
1263
+ }
1264
+ }
1265
+
1266
+ impl TryFrom<&AMitem> for u64 {
1267
+ type Error = am::AutomergeError;
1268
+
1269
+ fn try_from(item: &AMitem) -> Result<Self, Self::Error> {
1270
+ item.as_ref().try_into()
1271
+ }
1272
+ }
1273
+
1274
+ impl TryFrom<&AMitem> for AMunknownValue {
1275
+ type Error = am::AutomergeError;
1276
+
1277
+ fn try_from(item: &AMitem) -> Result<Self, Self::Error> {
1278
+ item.as_ref().try_into()
1279
+ }
1280
+ }
1281
+
1282
+ impl TryFrom<&AMitem> for (am::Value<'static>, am::ObjId) {
1283
+ type Error = am::AutomergeError;
1284
+
1285
+ fn try_from(item: &AMitem) -> Result<Self, Self::Error> {
1286
+ item.as_ref().try_into()
1287
+ }
1288
+ }
1289
+
1290
+ /// \ingroup enumerations
1291
+ /// \enum AMvalType
1292
+ /// \installed_headerfile
1293
+ /// \brief The type of an item's value.
1294
+ #[derive(Eq, PartialEq)]
1295
+ #[repr(C)]
1296
+ pub enum AMvalType {
1297
+ /// An actor identifier value.
1298
+ ActorId = 1 << 1,
1299
+ /// A boolean value.
1300
+ Bool = 1 << 2,
1301
+ /// A view onto an array of bytes value.
1302
+ Bytes = 1 << 3,
1303
+ /// A change value.
1304
+ Change = 1 << 4,
1305
+ /// A change hash value.
1306
+ ChangeHash = 1 << 5,
1307
+ /// A CRDT counter value.
1308
+ Counter = 1 << 6,
1309
+ /// A cursor value.
1310
+ Cursor = 1 << 7,
1311
+ /// The default tag, not a type signifier.
1312
+ Default = 0,
1313
+ /// A document value.
1314
+ Doc = 1 << 8,
1315
+ /// A 64-bit float value.
1316
+ F64 = 1 << 9,
1317
+ /// A 64-bit signed integer value.
1318
+ Int = 1 << 10,
1319
+ /// A mark.
1320
+ Mark = 1 << 11,
1321
+ /// A null value.
1322
+ Null = 1 << 12,
1323
+ /// An object type value.
1324
+ ObjType = 1 << 13,
1325
+ /// A UTF-8 string view value.
1326
+ Str = 1 << 14,
1327
+ /// A synchronization have value.
1328
+ SyncHave = 1 << 15,
1329
+ /// A synchronization message value.
1330
+ SyncMessage = 1 << 16,
1331
+ /// A synchronization state value.
1332
+ SyncState = 1 << 17,
1333
+ /// A *nix timestamp (milliseconds) value.
1334
+ Timestamp = 1 << 18,
1335
+ /// A 64-bit unsigned integer value.
1336
+ Uint = 1 << 19,
1337
+ /// An unknown type of value.
1338
+ Unknown = 1 << 20,
1339
+ /// A void.
1340
+ Void = 1 << 0,
1341
+ }
1342
+
1343
+ impl Default for AMvalType {
1344
+ fn default() -> Self {
1345
+ Self::Default
1346
+ }
1347
+ }
1348
+
1349
+ impl From<&am::Value<'static>> for AMvalType {
1350
+ fn from(value: &am::Value<'static>) -> Self {
1351
+ use am::ScalarValue::*;
1352
+ use am::Value::*;
1353
+
1354
+ match value {
1355
+ Object(_) => Self::ObjType,
1356
+ Scalar(scalar) => match scalar.as_ref() {
1357
+ Boolean(_) => Self::Bool,
1358
+ Bytes(_) => Self::Bytes,
1359
+ Counter(_) => Self::Counter,
1360
+ F64(_) => Self::F64,
1361
+ Int(_) => Self::Int,
1362
+ Null => Self::Null,
1363
+ Str(_) => Self::Str,
1364
+ Timestamp(_) => Self::Timestamp,
1365
+ Uint(_) => Self::Uint,
1366
+ Unknown { .. } => Self::Unknown,
1367
+ },
1368
+ }
1369
+ }
1370
+ }
1371
+
1372
+ impl From<&Value> for AMvalType {
1373
+ fn from(value: &Value) -> Self {
1374
+ use self::Value::*;
1375
+
1376
+ match value {
1377
+ ActorId(_, _) => Self::ActorId,
1378
+ Change(_, _) => Self::Change,
1379
+ ChangeHash(_) => Self::ChangeHash,
1380
+ Cursor(_) => Self::Cursor,
1381
+ Doc(_) => Self::Doc,
1382
+ Mark(_) => Self::Mark,
1383
+ SyncHave(_) => Self::SyncHave,
1384
+ SyncMessage(_) => Self::SyncMessage,
1385
+ SyncState(_) => Self::SyncState,
1386
+ Value(v) => v.into(),
1387
+ }
1388
+ }
1389
+ }
1390
+
1391
+ impl From<&Item> for AMvalType {
1392
+ fn from(item: &Item) -> Self {
1393
+ if let Some(value) = &item.value {
1394
+ return value.into();
1395
+ }
1396
+ Self::Void
1397
+ }
1398
+ }
1399
+
1400
+ /// \memberof AMitem
1401
+ /// \brief Tests the equality of two items.
1402
+ ///
1403
+ /// \param[in] item1 A pointer to an `AMitem` struct.
1404
+ /// \param[in] item2 A pointer to an `AMitem` struct.
1405
+ /// \return `true` if \p item1 `==` \p item2 and `false` otherwise.
1406
+ /// \pre \p item1 `!= NULL`
1407
+ /// \pre \p item2 `!= NULL`
1408
+ /// \post `!(`\p item1 `&&` \p item2 `) -> false`
1409
+ /// \internal
1410
+ ///
1411
+ /// #Safety
1412
+ /// item1 must be a valid AMitem pointer
1413
+ /// item2 must be a valid AMitem pointer
1414
+ #[no_mangle]
1415
+ pub unsafe extern "C" fn AMitemEqual(item1: *const AMitem, item2: *const AMitem) -> bool {
1416
+ match (item1.as_ref(), item2.as_ref()) {
1417
+ (Some(item1), Some(item2)) => *item1 == *item2,
1418
+ (None, None) | (None, Some(_)) | (Some(_), None) => false,
1419
+ }
1420
+ }
1421
+
1422
+ /// \memberof AMitem
1423
+ /// \brief Allocates a new item and initializes it from a boolean value.
1424
+ ///
1425
+ /// \param[in] value A boolean.
1426
+ /// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_BOOL` item.
1427
+ /// \warning The returned `AMresult` struct pointer must be passed to
1428
+ /// `AMresultFree()` in order to avoid a memory leak.
1429
+ #[no_mangle]
1430
+ pub unsafe extern "C" fn AMitemFromBool(value: bool) -> *mut AMresult {
1431
+ AMresult::item(am::Value::from(value).into()).into()
1432
+ }
1433
+
1434
+ /// \memberof AMitem
1435
+ /// \brief Allocates a new item and initializes it from an array of bytes value.
1436
+ ///
1437
+ /// \param[in] src A pointer to an array of bytes.
1438
+ /// \param[in] count The count of bytes to copy from the array pointed to by
1439
+ /// \p src.
1440
+ /// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_BYTES` item.
1441
+ /// \pre \p src `!= NULL`
1442
+ /// \pre `sizeof(`\p src `) > 0`
1443
+ /// \pre \p count `<= sizeof(`\p src `)`
1444
+ /// \warning The returned `AMresult` struct pointer must be passed to
1445
+ /// `AMresultFree()` in order to avoid a memory leak.
1446
+ /// \internal
1447
+ ///
1448
+ /// # Safety
1449
+ /// value.src must be a byte array of length >= value.count
1450
+ #[no_mangle]
1451
+ pub unsafe extern "C" fn AMitemFromBytes(src: *const u8, count: usize) -> *mut AMresult {
1452
+ let value = std::slice::from_raw_parts(src, count);
1453
+ AMresult::item(am::Value::bytes(value.to_vec()).into()).into()
1454
+ }
1455
+
1456
+ /// \memberof AMitem
1457
+ /// \brief Allocates a new item and initializes it from a change hash value.
1458
+ ///
1459
+ /// \param[in] value A change hash as an `AMbyteSpan` struct.
1460
+ /// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_CHANGE_HASH` item.
1461
+ /// \pre \p value.src `!= NULL`
1462
+ /// \pre `0 <` \p value.count `<= sizeof(`\p value.src `)`
1463
+ /// \warning The returned `AMresult` struct pointer must be passed to
1464
+ /// `AMresultFree()` in order to avoid a memory leak.
1465
+ /// \internal
1466
+ ///
1467
+ /// # Safety
1468
+ /// value.src must be a byte array of length >= value.count
1469
+ #[no_mangle]
1470
+ pub unsafe extern "C" fn AMitemFromChangeHash(value: AMbyteSpan) -> *mut AMresult {
1471
+ to_result(am::ChangeHash::try_from(&value))
1472
+ }
1473
+
1474
+ /// \memberof AMitem
1475
+ /// \brief Allocates a new item and initializes it from a CRDT counter value.
1476
+ ///
1477
+ /// \param[in] value A 64-bit signed integer.
1478
+ /// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_COUNTER` item.
1479
+ /// \warning The returned `AMresult` struct pointer must be passed to
1480
+ /// `AMresultFree()` in order to avoid a memory leak.
1481
+ #[no_mangle]
1482
+ pub unsafe extern "C" fn AMitemFromCounter(value: i64) -> *mut AMresult {
1483
+ AMresult::item(am::Value::counter(value).into()).into()
1484
+ }
1485
+
1486
+ /// \memberof AMitem
1487
+ /// \brief Allocates a new item and initializes it from a float value.
1488
+ ///
1489
+ /// \param[in] value A 64-bit float.
1490
+ /// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_F64` item.
1491
+ /// \warning The returned `AMresult` struct pointer must be passed to
1492
+ /// `AMresultFree()` in order to avoid a memory leak.
1493
+ #[no_mangle]
1494
+ pub unsafe extern "C" fn AMitemFromF64(value: f64) -> *mut AMresult {
1495
+ AMresult::item(am::Value::f64(value).into()).into()
1496
+ }
1497
+
1498
+ /// \memberof AMitem
1499
+ /// \brief Allocates a new item and initializes it from a signed integer value.
1500
+ ///
1501
+ /// \param[in] value A 64-bit signed integer.
1502
+ /// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_INT` item.
1503
+ /// \warning The returned `AMresult` struct pointer must be passed to
1504
+ /// `AMresultFree()` in order to avoid a memory leak.
1505
+ #[no_mangle]
1506
+ pub unsafe extern "C" fn AMitemFromInt(value: i64) -> *mut AMresult {
1507
+ AMresult::item(am::Value::int(value).into()).into()
1508
+ }
1509
+
1510
+ /// \memberof AMitem
1511
+ /// \brief Allocates a new item and initializes it from a null value.
1512
+ ///
1513
+ /// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_NULL` item.
1514
+ /// \warning The returned `AMresult` struct pointer must be passed to
1515
+ /// `AMresultFree()` in order to avoid a memory leak.
1516
+ #[no_mangle]
1517
+ pub unsafe extern "C" fn AMitemFromNull() -> *mut AMresult {
1518
+ AMresult::item(am::Value::from(()).into()).into()
1519
+ }
1520
+
1521
+ /// \memberof AMitem
1522
+ /// \brief Allocates a new item and initializes it from a UTF-8 string value.
1523
+ ///
1524
+ /// \param[in] value A UTF-8 string view as an `AMbyteSpan` struct.
1525
+ /// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_STR` item.
1526
+ /// \pre \p value.src `!= NULL`
1527
+ /// \pre `0 <` \p value.count `<= sizeof(`\p value.src `)`
1528
+ /// \warning The returned `AMresult` struct pointer must be passed to
1529
+ /// `AMresultFree()` in order to avoid a memory leak.
1530
+ /// \internal
1531
+ ///
1532
+ /// # Safety
1533
+ /// value.src must be a byte array of length >= value.count
1534
+ #[no_mangle]
1535
+ pub unsafe extern "C" fn AMitemFromStr(value: AMbyteSpan) -> *mut AMresult {
1536
+ AMresult::item(am::Value::str(to_str!(value)).into()).into()
1537
+ }
1538
+
1539
+ /// \memberof AMitem
1540
+ /// \brief Allocates a new item and initializes it from a *nix timestamp
1541
+ /// (milliseconds) value.
1542
+ ///
1543
+ /// \param[in] value A 64-bit signed integer.
1544
+ /// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_TIMESTAMP` item.
1545
+ /// \warning The returned `AMresult` struct pointer must be passed to
1546
+ /// `AMresultFree()` in order to avoid a memory leak.
1547
+ #[no_mangle]
1548
+ pub unsafe extern "C" fn AMitemFromTimestamp(value: i64) -> *mut AMresult {
1549
+ AMresult::item(am::Value::timestamp(value).into()).into()
1550
+ }
1551
+
1552
+ /// \memberof AMitem
1553
+ /// \brief Allocates a new item and initializes it from an unsigned integer value.
1554
+ ///
1555
+ /// \param[in] value A 64-bit unsigned integer.
1556
+ /// \return A pointer to an `AMresult` struct with an `AM_VAL_TYPE_UINT` item.
1557
+ /// \warning The returned `AMresult` struct pointer must be passed to
1558
+ /// `AMresultFree()` in order to avoid a memory leak.
1559
+ #[no_mangle]
1560
+ pub unsafe extern "C" fn AMitemFromUint(value: u64) -> *mut AMresult {
1561
+ AMresult::item(am::Value::uint(value).into()).into()
1562
+ }
1563
+
1564
+ /// \memberof AMitem
1565
+ /// \brief Gets the type of an item's index.
1566
+ ///
1567
+ /// \param[in] item A pointer to an `AMitem` struct.
1568
+ /// \return An `AMidxType` enum tag.
1569
+ /// \pre \p item `!= NULL`
1570
+ /// \post `(`\p item `== NULL) -> 0`
1571
+ /// \internal
1572
+ ///
1573
+ /// # Safety
1574
+ /// item must be a valid pointer to an AMitem
1575
+ #[no_mangle]
1576
+ pub unsafe extern "C" fn AMitemIdxType(item: *const AMitem) -> AMidxType {
1577
+ if let Some(item) = item.as_ref() {
1578
+ return item.0.as_ref().into();
1579
+ }
1580
+ Default::default()
1581
+ }
1582
+
1583
+ /// \memberof AMitem
1584
+ /// \brief Gets the object identifier of an item.
1585
+ ///
1586
+ /// \param[in] item A pointer to an `AMitem` struct.
1587
+ /// \return A pointer to an `AMobjId` struct.
1588
+ /// \pre \p item `!= NULL`
1589
+ /// \post `(`\p item `== NULL) -> NULL`
1590
+ /// \internal
1591
+ ///
1592
+ /// # Safety
1593
+ /// item must be a valid pointer to an AMitem
1594
+ #[no_mangle]
1595
+ pub unsafe extern "C" fn AMitemObjId(item: *const AMitem) -> *const AMobjId {
1596
+ if let Some(item) = item.as_ref() {
1597
+ if let Some(obj_id) = &item.as_ref().obj_id {
1598
+ return obj_id;
1599
+ }
1600
+ }
1601
+ std::ptr::null()
1602
+ }
1603
+
1604
+ /// \memberof AMitem
1605
+ /// \brief Gets the UTF-8 string view key index of an item.
1606
+ ///
1607
+ /// \param[in] item A pointer to an `AMitem` struct.
1608
+ /// \param[out] value A pointer to a UTF-8 string view as an `AMbyteSpan` struct.
1609
+ /// \return `true` if `AMitemIdxType(`\p item `) == AM_IDX_TYPE_KEY` and
1610
+ /// \p *value has been reassigned, `false` otherwise.
1611
+ /// \pre \p item `!= NULL`
1612
+ /// \internal
1613
+ ///
1614
+ /// # Safety
1615
+ /// item must be a valid pointer to an AMitem
1616
+ #[no_mangle]
1617
+ pub unsafe extern "C" fn AMitemKey(item: *const AMitem, value: *mut AMbyteSpan) -> bool {
1618
+ if let Some(item) = item.as_ref() {
1619
+ if let Some(index) = &item.as_ref().index {
1620
+ if let Ok(key) = index.try_into() {
1621
+ if !value.is_null() {
1622
+ *value = key;
1623
+ return true;
1624
+ }
1625
+ }
1626
+ }
1627
+ }
1628
+ false
1629
+ }
1630
+
1631
+ /// \memberof AMitem
1632
+ /// \brief Gets the unsigned integer position index of an item.
1633
+ ///
1634
+ /// \param[in] item A pointer to an `AMitem` struct.
1635
+ /// \param[out] value A pointer to a `size_t`.
1636
+ /// \return `true` if `AMitemIdxType(`\p item `) == AM_IDX_TYPE_POS` and
1637
+ /// \p *value has been reassigned, `false` otherwise.
1638
+ /// \pre \p item `!= NULL`
1639
+ /// \internal
1640
+ ///
1641
+ /// # Safety
1642
+ /// item must be a valid pointer to an AMitem
1643
+ #[no_mangle]
1644
+ pub unsafe extern "C" fn AMitemPos(item: *const AMitem, value: *mut usize) -> bool {
1645
+ if let Some(item) = item.as_ref() {
1646
+ if let Some(index) = &item.as_ref().index {
1647
+ if let Ok(pos) = index.try_into() {
1648
+ if !value.is_null() {
1649
+ *value = pos;
1650
+ return true;
1651
+ }
1652
+ }
1653
+ }
1654
+ }
1655
+ false
1656
+ }
1657
+
1658
+ /// \memberof AMitem
1659
+ /// \brief Gets the reference count of an item.
1660
+ ///
1661
+ /// \param[in] item A pointer to an `AMitem` struct.
1662
+ /// \return A 64-bit unsigned integer.
1663
+ /// \pre \p item `!= NULL`
1664
+ /// \post `(`\p item `== NULL) -> 0`
1665
+ /// \internal
1666
+ ///
1667
+ /// # Safety
1668
+ /// item must be a valid pointer to an AMitem
1669
+ #[no_mangle]
1670
+ pub unsafe extern "C" fn AMitemRefCount(item: *const AMitem) -> usize {
1671
+ if let Some(item) = item.as_ref() {
1672
+ return Rc::strong_count(&item.0);
1673
+ }
1674
+ 0
1675
+ }
1676
+
1677
+ /// \memberof AMitem
1678
+ /// \brief Gets a new result for an item.
1679
+ ///
1680
+ /// \param[in] item A pointer to an `AMitem` struct.
1681
+ /// \return A pointer to an `AMresult` struct.
1682
+ /// \pre \p item `!= NULL`
1683
+ /// \post `(`\p item `== NULL) -> NULL`
1684
+ /// \warning The returned `AMresult` struct pointer must be passed to
1685
+ /// `AMresultFree()` in order to avoid a memory leak.
1686
+ /// \internal
1687
+ ///
1688
+ /// # Safety
1689
+ /// item must be a valid pointer to an AMitem
1690
+ #[no_mangle]
1691
+ pub unsafe extern "C" fn AMitemResult(item: *const AMitem) -> *mut AMresult {
1692
+ if let Some(item) = item.as_ref() {
1693
+ return AMresult::item(item.clone()).into();
1694
+ }
1695
+ std::ptr::null_mut()
1696
+ }
1697
+
1698
+ /// \memberof AMitem
1699
+ /// \brief Gets the actor identifier value of an item.
1700
+ ///
1701
+ /// \param[in] item A pointer to an `AMitem` struct.
1702
+ /// \param[out] value A pointer to an `AMactorId` struct pointer.
1703
+ /// \return `true` if `AMitemValType(`\p item `) == AM_VAL_TYPE_ACTOR_ID` and
1704
+ /// \p *value has been reassigned, `false` otherwise.
1705
+ /// \pre \p item `!= NULL`
1706
+ /// \internal
1707
+ ///
1708
+ /// # Safety
1709
+ /// item must be a valid pointer to an AMitem
1710
+ #[no_mangle]
1711
+ pub unsafe extern "C" fn AMitemToActorId(
1712
+ item: *const AMitem,
1713
+ value: *mut *const AMactorId,
1714
+ ) -> bool {
1715
+ if let Some(item) = item.as_ref() {
1716
+ if let Ok(actor_id) = <&AMactorId>::try_from(item) {
1717
+ if !value.is_null() {
1718
+ *value = actor_id;
1719
+ return true;
1720
+ }
1721
+ }
1722
+ }
1723
+ false
1724
+ }
1725
+
1726
+ /// \memberof AMitem
1727
+ /// \brief Gets the boolean value of an item.
1728
+ ///
1729
+ /// \param[in] item A pointer to an `AMitem` struct.
1730
+ /// \param[out] value A pointer to a boolean.
1731
+ /// \return `true` if `AMitemValType(`\p item `) == AM_VAL_TYPE_BOOL` and
1732
+ /// \p *value has been reassigned, `false` otherwise.
1733
+ /// \pre \p item `!= NULL`
1734
+ /// \internal
1735
+ ///
1736
+ /// # Safety
1737
+ /// item must be a valid pointer to an AMitem
1738
+ #[no_mangle]
1739
+ pub unsafe extern "C" fn AMitemToBool(item: *const AMitem, value: *mut bool) -> bool {
1740
+ if let Some(item) = item.as_ref() {
1741
+ if let Ok(boolean) = item.try_into() {
1742
+ if !value.is_null() {
1743
+ *value = boolean;
1744
+ return true;
1745
+ }
1746
+ }
1747
+ }
1748
+ false
1749
+ }
1750
+
1751
+ /// \memberof AMitem
1752
+ /// \brief Gets the array of bytes value of an item.
1753
+ ///
1754
+ /// \param[in] item A pointer to an `AMitem` struct.
1755
+ /// \param[out] value A pointer to an `AMbyteSpan` struct.
1756
+ /// \return `true` if `AMitemValType(`\p item `) == AM_VAL_TYPE_BYTES` and
1757
+ /// \p *value has been reassigned, `false` otherwise.
1758
+ /// \pre \p item `!= NULL`
1759
+ /// \internal
1760
+ ///
1761
+ /// # Safety
1762
+ /// item must be a valid pointer to an AMitem
1763
+ #[no_mangle]
1764
+ pub unsafe extern "C" fn AMitemToBytes(item: *const AMitem, value: *mut AMbyteSpan) -> bool {
1765
+ if let Some(item) = item.as_ref() {
1766
+ if let Ok(bytes) = item.as_ref().try_into_bytes() {
1767
+ if !value.is_null() {
1768
+ *value = bytes;
1769
+ return true;
1770
+ }
1771
+ }
1772
+ }
1773
+ false
1774
+ }
1775
+
1776
+ /// \memberof AMitem
1777
+ /// \brief Gets the change value of an item.
1778
+ ///
1779
+ /// \param[in] item A pointer to an `AMitem` struct.
1780
+ /// \param[out] value A pointer to an `AMchange` struct pointer.
1781
+ /// \return `true` if `AMitemValType(`\p item `) == AM_VAL_TYPE_CHANGE` and
1782
+ /// \p *value has been reassigned, `false` otherwise.
1783
+ /// \pre \p item `!= NULL`
1784
+ /// \internal
1785
+ ///
1786
+ /// # Safety
1787
+ /// item must be a valid pointer to an AMitem
1788
+ #[no_mangle]
1789
+ pub unsafe extern "C" fn AMitemToChange(item: *mut AMitem, value: *mut *mut AMchange) -> bool {
1790
+ if let Some(item) = item.as_mut() {
1791
+ if let Ok(change) = <&mut AMchange>::try_from(item) {
1792
+ if !value.is_null() {
1793
+ *value = change;
1794
+ return true;
1795
+ }
1796
+ }
1797
+ }
1798
+ false
1799
+ }
1800
+
1801
+ /// \memberof AMitem
1802
+ /// \brief Gets the change hash value of an item.
1803
+ ///
1804
+ /// \param[in] item A pointer to an `AMitem` struct.
1805
+ /// \param[out] value A pointer to an `AMbyteSpan` struct.
1806
+ /// \return `true` if `AMitemValType(`\p item `) == AM_VAL_TYPE_CHANGE_HASH` and
1807
+ /// \p *value has been reassigned, `false` otherwise.
1808
+ /// \pre \p item `!= NULL`
1809
+ /// \internal
1810
+ ///
1811
+ /// # Safety
1812
+ /// item must be a valid pointer to an AMitem
1813
+ #[no_mangle]
1814
+ pub unsafe extern "C" fn AMitemToChangeHash(item: *const AMitem, value: *mut AMbyteSpan) -> bool {
1815
+ if let Some(item) = item.as_ref() {
1816
+ if let Ok(change_hash) = item.as_ref().try_into_change_hash() {
1817
+ if !value.is_null() {
1818
+ *value = change_hash;
1819
+ return true;
1820
+ }
1821
+ }
1822
+ }
1823
+ false
1824
+ }
1825
+
1826
+ /// \memberof AMitem
1827
+ /// \brief Gets the CRDT counter value of an item.
1828
+ ///
1829
+ /// \param[in] item A pointer to an `AMitem` struct.
1830
+ /// \param[out] value A pointer to a signed 64-bit integer.
1831
+ /// \return `true` if `AMitemValType(`\p item `) == AM_VAL_TYPE_COUNTER` and
1832
+ /// \p *value has been reassigned, `false` otherwise.
1833
+ /// \pre \p item `!= NULL`
1834
+ /// \internal
1835
+ ///
1836
+ /// # Safety
1837
+ /// item must be a valid pointer to an AMitem
1838
+ #[no_mangle]
1839
+ pub unsafe extern "C" fn AMitemToCounter(item: *const AMitem, value: *mut i64) -> bool {
1840
+ if let Some(item) = item.as_ref() {
1841
+ if let Ok(counter) = item.as_ref().try_into_counter() {
1842
+ if !value.is_null() {
1843
+ *value = counter;
1844
+ return true;
1845
+ }
1846
+ }
1847
+ }
1848
+ false
1849
+ }
1850
+
1851
+ /// \memberof AMitem
1852
+ /// \brief Gets the cursor value of an item.
1853
+ ///
1854
+ /// \param[in] item A pointer to an `AMitem` struct.
1855
+ /// \param[out] value A pointer to an `AMcursor` struct pointer.
1856
+ /// \return `true` if `AMitemValType(`\p item `) == AM_VAL_TYPE_CURSOR` and
1857
+ /// \p *value has been reassigned, `false` otherwise.
1858
+ /// \pre \p item `!= NULL`
1859
+ /// \internal
1860
+ ///
1861
+ /// # Safety
1862
+ /// item must be a valid pointer to an AMitem
1863
+ #[no_mangle]
1864
+ pub unsafe extern "C" fn AMitemToCursor(item: *const AMitem, value: *mut *const AMcursor) -> bool {
1865
+ if let Some(item) = item.as_ref() {
1866
+ if let Ok(cursor) = <&AMcursor>::try_from(item) {
1867
+ if !value.is_null() {
1868
+ *value = cursor;
1869
+ return true;
1870
+ }
1871
+ }
1872
+ }
1873
+ false
1874
+ }
1875
+
1876
+ /// \memberof AMitem
1877
+ /// \brief Gets the document value of an item.
1878
+ ///
1879
+ /// \param[in] item A pointer to an `AMitem` struct.
1880
+ /// \param[out] value A pointer to an `AMdoc` struct pointer.
1881
+ /// \return `true` if `AMitemValType(`\p item `) == AM_VAL_TYPE_DOC` and
1882
+ /// \p *value has been reassigned, `false` otherwise.
1883
+ /// \pre \p item `!= NULL`
1884
+ /// \internal
1885
+ ///
1886
+ /// # Safety
1887
+ /// item must be a valid pointer to an AMitem
1888
+ #[no_mangle]
1889
+ pub unsafe extern "C" fn AMitemToDoc(item: *mut AMitem, value: *mut *mut AMdoc) -> bool {
1890
+ if let Some(item) = item.as_mut() {
1891
+ if let Ok(doc) = <&mut AMdoc>::try_from(item) {
1892
+ if !value.is_null() {
1893
+ *value = doc;
1894
+ return true;
1895
+ }
1896
+ }
1897
+ }
1898
+ false
1899
+ }
1900
+
1901
+ /// \memberof AMitem
1902
+ /// \brief Gets the float value of an item.
1903
+ ///
1904
+ /// \param[in] item A pointer to an `AMitem` struct.
1905
+ /// \param[out] value A pointer to a 64-bit float.
1906
+ /// \return `true` if `AMitemValType(`\p item `) == AM_VAL_TYPE_F64` and
1907
+ /// \p *value has been reassigned, `false` otherwise.
1908
+ /// \pre \p item `!= NULL`
1909
+ /// \internal
1910
+ ///
1911
+ /// # Safety
1912
+ /// item must be a valid pointer to an AMitem
1913
+ #[no_mangle]
1914
+ pub unsafe extern "C" fn AMitemToF64(item: *const AMitem, value: *mut f64) -> bool {
1915
+ if let Some(item) = item.as_ref() {
1916
+ if let Ok(float) = item.try_into() {
1917
+ if !value.is_null() {
1918
+ *value = float;
1919
+ return true;
1920
+ }
1921
+ }
1922
+ }
1923
+ false
1924
+ }
1925
+
1926
+ /// \memberof AMitem
1927
+ /// \brief Gets the integer value of an item.
1928
+ ///
1929
+ /// \param[in] item A pointer to an `AMitem` struct.
1930
+ /// \param[out] value A pointer to a signed 64-bit integer.
1931
+ /// \return `true` if `AMitemValType(`\p item `) == AM_VAL_TYPE_INT` and
1932
+ /// \p *value has been reassigned, `false` otherwise.
1933
+ /// \pre \p item `!= NULL`
1934
+ /// \internal
1935
+ ///
1936
+ /// # Safety
1937
+ /// item must be a valid pointer to an AMitem
1938
+ #[no_mangle]
1939
+ pub unsafe extern "C" fn AMitemToInt(item: *const AMitem, value: *mut i64) -> bool {
1940
+ if let Some(item) = item.as_ref() {
1941
+ if let Ok(int) = item.as_ref().try_into_int() {
1942
+ if !value.is_null() {
1943
+ *value = int;
1944
+ return true;
1945
+ }
1946
+ }
1947
+ }
1948
+ false
1949
+ }
1950
+
1951
+ /// \memberof AMitem
1952
+ /// \brief Gets the mark value of an item.
1953
+ ///
1954
+ /// \param[in] item A pointer to an `AMitem` struct.
1955
+ /// \param[out] value A pointer to an `AMmark` struct pointer.
1956
+ /// \return `true` if `AMitemValType(`\p item `) == AM_VAL_TYPE_MARK` and
1957
+ /// \p *value has been reassigned, `false` otherwise.
1958
+ /// \pre \p item `!= NULL`
1959
+ /// \internal
1960
+ ///
1961
+ /// # Safety
1962
+ /// item must be a valid pointer to an AMitem
1963
+ #[no_mangle]
1964
+ pub unsafe extern "C" fn AMitemToMark(item: *const AMitem, value: *mut *const AMmark) -> bool {
1965
+ if let Some(item) = item.as_ref() {
1966
+ if let Ok(mark) = <&AMmark>::try_from(item) {
1967
+ if !value.is_null() {
1968
+ *value = mark;
1969
+ return true;
1970
+ }
1971
+ }
1972
+ }
1973
+ false
1974
+ }
1975
+
1976
+ /// \memberof AMitem
1977
+ /// \brief Gets the UTF-8 string view value of an item.
1978
+ ///
1979
+ /// \param[in] item A pointer to an `AMitem` struct.
1980
+ /// \param[out] value A pointer to a UTF-8 string view as an `AMbyteSpan` struct.
1981
+ /// \return `true` if `AMitemValType(`\p item `) == AM_VAL_TYPE_STR` and
1982
+ /// \p *value has been reassigned, `false` otherwise.
1983
+ /// \pre \p item `!= NULL`
1984
+ /// \internal
1985
+ ///
1986
+ /// # Safety
1987
+ /// item must be a valid pointer to an AMitem
1988
+ #[no_mangle]
1989
+ pub unsafe extern "C" fn AMitemToStr(item: *const AMitem, value: *mut AMbyteSpan) -> bool {
1990
+ if let Some(item) = item.as_ref() {
1991
+ if let Ok(str) = item.as_ref().try_into_str() {
1992
+ if !value.is_null() {
1993
+ *value = str;
1994
+ return true;
1995
+ }
1996
+ }
1997
+ }
1998
+ false
1999
+ }
2000
+
2001
+ /// \memberof AMitem
2002
+ /// \brief Gets the synchronization have value of an item.
2003
+ ///
2004
+ /// \param[in] item A pointer to an `AMitem` struct.
2005
+ /// \param[out] value A pointer to an `AMsyncHave` struct pointer.
2006
+ /// \return `true` if `AMitemValType(`\p item `) == AM_VAL_TYPE_SYNC_HAVE` and
2007
+ /// \p *value has been reassigned, `false` otherwise.
2008
+ /// \pre \p item `!= NULL`
2009
+ /// \internal
2010
+ ///
2011
+ /// # Safety
2012
+ /// item must be a valid pointer to an AMitem
2013
+ #[no_mangle]
2014
+ pub unsafe extern "C" fn AMitemToSyncHave(
2015
+ item: *const AMitem,
2016
+ value: *mut *const AMsyncHave,
2017
+ ) -> bool {
2018
+ if let Some(item) = item.as_ref() {
2019
+ if let Ok(sync_have) = <&AMsyncHave>::try_from(item) {
2020
+ if !value.is_null() {
2021
+ *value = sync_have;
2022
+ return true;
2023
+ }
2024
+ }
2025
+ }
2026
+ false
2027
+ }
2028
+
2029
+ /// \memberof AMitem
2030
+ /// \brief Gets the synchronization message value of an item.
2031
+ ///
2032
+ /// \param[in] item A pointer to an `AMitem` struct.
2033
+ /// \param[out] value A pointer to an `AMsyncMessage` struct pointer.
2034
+ /// \return `true` if `AMitemValType(`\p item `) == AM_VAL_TYPE_SYNC_MESSAGE` and
2035
+ /// \p *value has been reassigned, `false` otherwise.
2036
+ /// \pre \p item `!= NULL`
2037
+ /// \internal
2038
+ ///
2039
+ /// # Safety
2040
+ /// item must be a valid pointer to an AMitem
2041
+ #[no_mangle]
2042
+ pub unsafe extern "C" fn AMitemToSyncMessage(
2043
+ item: *const AMitem,
2044
+ value: *mut *const AMsyncMessage,
2045
+ ) -> bool {
2046
+ if let Some(item) = item.as_ref() {
2047
+ if let Ok(sync_message) = <&AMsyncMessage>::try_from(item) {
2048
+ if !value.is_null() {
2049
+ *value = sync_message;
2050
+ return true;
2051
+ }
2052
+ }
2053
+ }
2054
+ false
2055
+ }
2056
+
2057
+ /// \memberof AMitem
2058
+ /// \brief Gets the synchronization state value of an item.
2059
+ ///
2060
+ /// \param[in] item A pointer to an `AMitem` struct.
2061
+ /// \param[out] value A pointer to an `AMsyncState` struct pointer.
2062
+ /// \return `true` if `AMitemValType(`\p item `) == AM_VAL_TYPE_SYNC_STATE` and
2063
+ /// \p *value has been reassigned, `false` otherwise.
2064
+ /// \pre \p item `!= NULL`
2065
+ /// \internal
2066
+ ///
2067
+ /// # Safety
2068
+ /// item must be a valid pointer to an AMitem
2069
+ #[no_mangle]
2070
+ pub unsafe extern "C" fn AMitemToSyncState(
2071
+ item: *mut AMitem,
2072
+ value: *mut *mut AMsyncState,
2073
+ ) -> bool {
2074
+ if let Some(item) = item.as_mut() {
2075
+ if let Ok(sync_state) = <&mut AMsyncState>::try_from(item) {
2076
+ if !value.is_null() {
2077
+ *value = sync_state;
2078
+ return true;
2079
+ }
2080
+ }
2081
+ }
2082
+ false
2083
+ }
2084
+
2085
+ /// \memberof AMitem
2086
+ /// \brief Gets the *nix timestamp (milliseconds) value of an item.
2087
+ ///
2088
+ /// \param[in] item A pointer to an `AMitem` struct.
2089
+ /// \param[out] value A pointer to a signed 64-bit integer.
2090
+ /// \return `true` if `AMitemValType(`\p item `) == AM_VAL_TYPE_TIMESTAMP` and
2091
+ /// \p *value has been reassigned, `false` otherwise.
2092
+ /// \pre \p item `!= NULL`
2093
+ /// \internal
2094
+ ///
2095
+ /// # Safety
2096
+ /// item must be a valid pointer to an AMitem
2097
+ #[no_mangle]
2098
+ pub unsafe extern "C" fn AMitemToTimestamp(item: *const AMitem, value: *mut i64) -> bool {
2099
+ if let Some(item) = item.as_ref() {
2100
+ if let Ok(timestamp) = item.as_ref().try_into_timestamp() {
2101
+ if !value.is_null() {
2102
+ *value = timestamp;
2103
+ return true;
2104
+ }
2105
+ }
2106
+ }
2107
+ false
2108
+ }
2109
+
2110
+ /// \memberof AMitem
2111
+ /// \brief Gets the unsigned integer value of an item.
2112
+ ///
2113
+ /// \param[in] item A pointer to an `AMitem` struct.
2114
+ /// \param[out] value A pointer to a unsigned 64-bit integer.
2115
+ /// \return `true` if `AMitemValType(`\p item `) == AM_VAL_TYPE_UINT` and
2116
+ /// \p *value has been reassigned, `false` otherwise.
2117
+ /// \pre \p item `!= NULL`
2118
+ /// \internal
2119
+ ///
2120
+ /// # Safety
2121
+ /// item must be a valid pointer to an AMitem
2122
+ #[no_mangle]
2123
+ pub unsafe extern "C" fn AMitemToUint(item: *const AMitem, value: *mut u64) -> bool {
2124
+ if let Some(item) = item.as_ref() {
2125
+ if let Ok(uint) = item.try_into() {
2126
+ if !value.is_null() {
2127
+ *value = uint;
2128
+ return true;
2129
+ }
2130
+ }
2131
+ }
2132
+ false
2133
+ }
2134
+
2135
+ /// \memberof AMitem
2136
+ /// \brief Gets the unknown type of value of an item.
2137
+ ///
2138
+ /// \param[in] item A pointer to an `AMitem` struct.
2139
+ /// \param[out] value A pointer to an `AMunknownValue` struct.
2140
+ /// \return `true` if `AMitemValType(`\p item `) == AM_VAL_TYPE_UNKNOWN` and
2141
+ /// \p *value has been reassigned, `false` otherwise.
2142
+ /// \pre \p item `!= NULL`
2143
+ /// \internal
2144
+ ///
2145
+ /// # Safety
2146
+ /// item must be a valid pointer to an AMitem
2147
+ #[no_mangle]
2148
+ pub unsafe extern "C" fn AMitemToUnknown(item: *const AMitem, value: *mut AMunknownValue) -> bool {
2149
+ if let Some(item) = item.as_ref() {
2150
+ if let Ok(unknown) = item.try_into() {
2151
+ if !value.is_null() {
2152
+ *value = unknown;
2153
+ return true;
2154
+ }
2155
+ }
2156
+ }
2157
+ false
2158
+ }
2159
+
2160
+ /// \memberof AMitem
2161
+ /// \brief Gets the type of an item's value.
2162
+ ///
2163
+ /// \param[in] item A pointer to an `AMitem` struct.
2164
+ /// \return An `AMvalType` enum tag.
2165
+ /// \pre \p item `!= NULL`
2166
+ /// \post `(`\p item `== NULL) -> 0`
2167
+ /// \internal
2168
+ ///
2169
+ /// # Safety
2170
+ /// item must be a valid pointer to an AMitem
2171
+ #[no_mangle]
2172
+ pub unsafe extern "C" fn AMitemValType(item: *const AMitem) -> AMvalType {
2173
+ if let Some(item) = item.as_ref() {
2174
+ return item.0.as_ref().into();
2175
+ }
2176
+ Default::default()
2177
+ }