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.
- checksums.yaml +7 -0
- data/LICENSE.txt +22 -0
- data/README.md +175 -0
- data/ext/automerge_ext/automerge_ext.c +1805 -0
- data/ext/automerge_ext/extconf.rb +132 -0
- data/lib/automerge/version.rb +6 -0
- data/lib/automerge.rb +110 -0
- data/rust-toolchain.toml +4 -0
- data/vendor/automerge-rust/Cargo.lock +1909 -0
- data/vendor/automerge-rust/Cargo.toml +15 -0
- data/vendor/automerge-rust/automerge/Cargo.toml +78 -0
- data/vendor/automerge-rust/automerge/README.md +5 -0
- data/vendor/automerge-rust/automerge/benches/load_save.rs +102 -0
- data/vendor/automerge-rust/automerge/benches/map.rs +260 -0
- data/vendor/automerge-rust/automerge/benches/range.rs +37 -0
- data/vendor/automerge-rust/automerge/benches/sync.rs +95 -0
- data/vendor/automerge-rust/automerge/examples/README.md +7 -0
- data/vendor/automerge-rust/automerge/examples/quickstart.rs +57 -0
- data/vendor/automerge-rust/automerge/examples/watch.rs +94 -0
- data/vendor/automerge-rust/automerge/fuzz/Cargo.toml +29 -0
- data/vendor/automerge-rust/automerge/fuzz/fuzz_targets/load.rs +37 -0
- data/vendor/automerge-rust/automerge/src/autocommit.rs +1286 -0
- data/vendor/automerge-rust/automerge/src/automerge/current_state.rs +546 -0
- data/vendor/automerge-rust/automerge/src/automerge/tests.rs +2023 -0
- data/vendor/automerge-rust/automerge/src/automerge.rs +2071 -0
- data/vendor/automerge-rust/automerge/src/autoserde.rs +128 -0
- data/vendor/automerge-rust/automerge/src/change.rs +357 -0
- data/vendor/automerge-rust/automerge/src/change_graph.rs +1215 -0
- data/vendor/automerge-rust/automerge/src/change_queue.rs +46 -0
- data/vendor/automerge-rust/automerge/src/clock.rs +206 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/boolean.rs +83 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/delta.rs +148 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/generic/group.rs +138 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/generic/simple.rs +76 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/generic.rs +93 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/key.rs +272 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/obj_id.rs +202 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/opid_list.rs +329 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/raw.rs +38 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/rle.rs +216 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range/value.rs +547 -0
- data/vendor/automerge-rust/automerge/src/columnar/column_range.rs +17 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/boolean.rs +197 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/col_error.rs +88 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/column_decoder.rs +133 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/decodable_impls.rs +175 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/delta.rs +96 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/encodable_impls.rs +200 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/leb128.rs +82 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/properties.rs +178 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/raw.rs +101 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding/rle.rs +239 -0
- data/vendor/automerge-rust/automerge/src/columnar/encoding.rs +67 -0
- data/vendor/automerge-rust/automerge/src/columnar/splice_error.rs +47 -0
- data/vendor/automerge-rust/automerge/src/columnar.rs +14 -0
- data/vendor/automerge-rust/automerge/src/convert.rs +112 -0
- data/vendor/automerge-rust/automerge/src/cursor.rs +296 -0
- data/vendor/automerge-rust/automerge/src/decoding.rs +475 -0
- data/vendor/automerge-rust/automerge/src/error.rs +159 -0
- data/vendor/automerge-rust/automerge/src/exid.rs +238 -0
- data/vendor/automerge-rust/automerge/src/hydrate/list.rs +140 -0
- data/vendor/automerge-rust/automerge/src/hydrate/map.rs +132 -0
- data/vendor/automerge-rust/automerge/src/hydrate/tests.rs +40 -0
- data/vendor/automerge-rust/automerge/src/hydrate/text.rs +89 -0
- data/vendor/automerge-rust/automerge/src/hydrate.rs +368 -0
- data/vendor/automerge-rust/automerge/src/indexed_cache.rs +113 -0
- data/vendor/automerge-rust/automerge/src/iter/doc.rs +603 -0
- data/vendor/automerge-rust/automerge/src/iter/keys.rs +93 -0
- data/vendor/automerge-rust/automerge/src/iter/list_range.rs +433 -0
- data/vendor/automerge-rust/automerge/src/iter/map_range.rs +316 -0
- data/vendor/automerge-rust/automerge/src/iter/spans.rs +601 -0
- data/vendor/automerge-rust/automerge/src/iter/tools.rs +427 -0
- data/vendor/automerge-rust/automerge/src/iter/values.rs +36 -0
- data/vendor/automerge-rust/automerge/src/iter.rs +25 -0
- data/vendor/automerge-rust/automerge/src/legacy/mod.rs +364 -0
- data/vendor/automerge-rust/automerge/src/legacy/serde_impls/actor_id.rs +25 -0
- data/vendor/automerge-rust/automerge/src/legacy/serde_impls/change_hash.rs +29 -0
- data/vendor/automerge-rust/automerge/src/legacy/serde_impls/element_id.rs +27 -0
- data/vendor/automerge-rust/automerge/src/legacy/serde_impls/mod.rs +31 -0
- data/vendor/automerge-rust/automerge/src/legacy/serde_impls/object_id.rs +36 -0
- data/vendor/automerge-rust/automerge/src/legacy/serde_impls/op.rs +668 -0
- data/vendor/automerge-rust/automerge/src/legacy/serde_impls/op_type.rs +26 -0
- data/vendor/automerge-rust/automerge/src/legacy/serde_impls/opid.rs +25 -0
- data/vendor/automerge-rust/automerge/src/legacy/serde_impls/scalar_value.rs +63 -0
- data/vendor/automerge-rust/automerge/src/legacy/utility_impls/element_id.rs +66 -0
- data/vendor/automerge-rust/automerge/src/legacy/utility_impls/key.rs +49 -0
- data/vendor/automerge-rust/automerge/src/legacy/utility_impls/mod.rs +4 -0
- data/vendor/automerge-rust/automerge/src/legacy/utility_impls/object_id.rs +74 -0
- data/vendor/automerge-rust/automerge/src/legacy/utility_impls/opid.rs +68 -0
- data/vendor/automerge-rust/automerge/src/lib.rs +315 -0
- data/vendor/automerge-rust/automerge/src/marks.rs +478 -0
- data/vendor/automerge-rust/automerge/src/op_set2/change/batch.rs +2002 -0
- data/vendor/automerge-rust/automerge/src/op_set2/change/collector.rs +974 -0
- data/vendor/automerge-rust/automerge/src/op_set2/change.rs +332 -0
- data/vendor/automerge-rust/automerge/src/op_set2/columns.rs +714 -0
- data/vendor/automerge-rust/automerge/src/op_set2/meta.rs +174 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op.rs +1363 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/elems.rs +43 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/found_op.rs +60 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/index.rs +197 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/insert.rs +179 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/mark_index.rs +292 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/marks.rs +86 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/op_iter.rs +1295 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/op_query.rs +82 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/top_op.rs +50 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set/visible.rs +290 -0
- data/vendor/automerge-rust/automerge/src/op_set2/op_set.rs +1793 -0
- data/vendor/automerge-rust/automerge/src/op_set2/parents.rs +133 -0
- data/vendor/automerge-rust/automerge/src/op_set2/skip_list.rs +714 -0
- data/vendor/automerge-rust/automerge/src/op_set2/types.rs +769 -0
- data/vendor/automerge-rust/automerge/src/op_set2.rs +18 -0
- data/vendor/automerge-rust/automerge/src/patches/patch.rs +95 -0
- data/vendor/automerge-rust/automerge/src/patches/patch_builder.rs +382 -0
- data/vendor/automerge-rust/automerge/src/patches/patch_log.rs +584 -0
- data/vendor/automerge-rust/automerge/src/patches.rs +7 -0
- data/vendor/automerge-rust/automerge/src/query/list_state.rs +230 -0
- data/vendor/automerge-rust/automerge/src/query/seek_mark.rs +142 -0
- data/vendor/automerge-rust/automerge/src/read.rs +326 -0
- data/vendor/automerge-rust/automerge/src/sequence_tree.rs +662 -0
- data/vendor/automerge-rust/automerge/src/storage/bundle/builder.rs +942 -0
- data/vendor/automerge-rust/automerge/src/storage/bundle/error.rs +42 -0
- data/vendor/automerge-rust/automerge/src/storage/bundle/meta.rs +23 -0
- data/vendor/automerge-rust/automerge/src/storage/bundle/storage.rs +146 -0
- data/vendor/automerge-rust/automerge/src/storage/bundle.rs +210 -0
- data/vendor/automerge-rust/automerge/src/storage/change/change_actors.rs +311 -0
- data/vendor/automerge-rust/automerge/src/storage/change/change_op_columns.rs +621 -0
- data/vendor/automerge-rust/automerge/src/storage/change/compressed.rs +51 -0
- data/vendor/automerge-rust/automerge/src/storage/change/op_with_change_actors.rs +1 -0
- data/vendor/automerge-rust/automerge/src/storage/change.rs +523 -0
- data/vendor/automerge-rust/automerge/src/storage/chunk.rs +312 -0
- data/vendor/automerge-rust/automerge/src/storage/columns/column.rs +42 -0
- data/vendor/automerge-rust/automerge/src/storage/columns/column_builder.rs +199 -0
- data/vendor/automerge-rust/automerge/src/storage/columns/column_specification.rs +340 -0
- data/vendor/automerge-rust/automerge/src/storage/columns/raw_column.rs +286 -0
- data/vendor/automerge-rust/automerge/src/storage/columns.rs +355 -0
- data/vendor/automerge-rust/automerge/src/storage/document/compression.rs +362 -0
- data/vendor/automerge-rust/automerge/src/storage/document.rs +411 -0
- data/vendor/automerge-rust/automerge/src/storage/load/change_collector.rs +15 -0
- data/vendor/automerge-rust/automerge/src/storage/load.rs +136 -0
- data/vendor/automerge-rust/automerge/src/storage/parse/leb128.rs +302 -0
- data/vendor/automerge-rust/automerge/src/storage/parse.rs +619 -0
- data/vendor/automerge-rust/automerge/src/storage/save/document.rs +27 -0
- data/vendor/automerge-rust/automerge/src/storage.rs +26 -0
- data/vendor/automerge-rust/automerge/src/sync/bloom.rs +161 -0
- data/vendor/automerge-rust/automerge/src/sync/message_builder.rs +118 -0
- data/vendor/automerge-rust/automerge/src/sync/state.rs +214 -0
- data/vendor/automerge-rust/automerge/src/sync/v1_compat_test/bloom.rs +162 -0
- data/vendor/automerge-rust/automerge/src/sync/v1_compat_test/mod.rs +625 -0
- data/vendor/automerge-rust/automerge/src/sync/v1_compat_test/state.rs +120 -0
- data/vendor/automerge-rust/automerge/src/sync.rs +2482 -0
- data/vendor/automerge-rust/automerge/src/text_diff/LICENSE +201 -0
- data/vendor/automerge-rust/automerge/src/text_diff/myers.rs +332 -0
- data/vendor/automerge-rust/automerge/src/text_diff/replace.rs +139 -0
- data/vendor/automerge-rust/automerge/src/text_diff/utils.rs +119 -0
- data/vendor/automerge-rust/automerge/src/text_diff.rs +515 -0
- data/vendor/automerge-rust/automerge/src/text_value.rs +276 -0
- data/vendor/automerge-rust/automerge/src/transaction/commit.rs +34 -0
- data/vendor/automerge-rust/automerge/src/transaction/inner.rs +1403 -0
- data/vendor/automerge-rust/automerge/src/transaction/manual_transaction.rs +147 -0
- data/vendor/automerge-rust/automerge/src/transaction/owned_transaction.rs +266 -0
- data/vendor/automerge-rust/automerge/src/transaction/result.rs +21 -0
- data/vendor/automerge-rust/automerge/src/transaction/transactable.rs +203 -0
- data/vendor/automerge-rust/automerge/src/transaction.rs +513 -0
- data/vendor/automerge-rust/automerge/src/types.rs +749 -0
- data/vendor/automerge-rust/automerge/src/validation.rs +29 -0
- data/vendor/automerge-rust/automerge/src/value.rs +763 -0
- data/vendor/automerge-rust/automerge/tests/batch_insert.rs +1034 -0
- data/vendor/automerge-rust/automerge/tests/block_tests.rs +887 -0
- data/vendor/automerge-rust/automerge/tests/convert_string_to_text.rs +72 -0
- data/vendor/automerge-rust/automerge/tests/diff_marks.rs +1508 -0
- data/vendor/automerge-rust/automerge/tests/fixtures/64bit_obj_id_change.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fixtures/64bit_obj_id_doc.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fixtures/counter_value_has_incorrect_meta.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fixtures/counter_value_is_ok.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fixtures/counter_value_is_overlong.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fixtures/two_change_chunks.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fixtures/two_change_chunks_compressed.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fixtures/two_change_chunks_out_of_order.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fuzz-crashers/action-is-48.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fuzz-crashers/crash-da39a3ee5e6b4b0d3255bfef95601890afd80709 +0 -0
- data/vendor/automerge-rust/automerge/tests/fuzz-crashers/incorrect_max_op.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fuzz-crashers/invalid_deflate_stream.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fuzz-crashers/missing_actor.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fuzz-crashers/overflow_in_length.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fuzz-crashers/too_many_deps.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/fuzz-crashers/too_many_ops.automerge +0 -0
- data/vendor/automerge-rust/automerge/tests/test.rs +2668 -0
- data/vendor/automerge-rust/automerge/tests/test_mark_patches.rs +41 -0
- data/vendor/automerge-rust/automerge/tests/test_save_load_orphans.rs +84 -0
- data/vendor/automerge-rust/automerge/tests/text.rs +1098 -0
- data/vendor/automerge-rust/automerge/tests/text_encoding.rs +640 -0
- data/vendor/automerge-rust/automerge-c/CMakeLists.txt +439 -0
- data/vendor/automerge-rust/automerge-c/Cargo.toml +22 -0
- data/vendor/automerge-rust/automerge-c/README.md +233 -0
- data/vendor/automerge-rust/automerge-c/build.rs +21 -0
- data/vendor/automerge-rust/automerge-c/cbindgen.toml +48 -0
- data/vendor/automerge-rust/automerge-c/cmake/Cargo.toml.in +22 -0
- data/vendor/automerge-rust/automerge-c/cmake/automerge-c-config.cmake.in +99 -0
- data/vendor/automerge-rust/automerge-c/cmake/cbindgen.toml.in +48 -0
- data/vendor/automerge-rust/automerge-c/cmake/config.h.in +58 -0
- data/vendor/automerge-rust/automerge-c/cmake/enum-string-functions-gen.cmake +183 -0
- data/vendor/automerge-rust/automerge-c/cmake/file-regex-replace.cmake +33 -0
- data/vendor/automerge-rust/automerge-c/cmake/file-touch.cmake +35 -0
- data/vendor/automerge-rust/automerge-c/docs/CMakeLists.txt +39 -0
- data/vendor/automerge-rust/automerge-c/docs/img/brandmark.png +0 -0
- data/vendor/automerge-rust/automerge-c/examples/CMakeLists.txt +42 -0
- data/vendor/automerge-rust/automerge-c/examples/README.md +9 -0
- data/vendor/automerge-rust/automerge-c/examples/quickstart.c +131 -0
- data/vendor/automerge-rust/automerge-c/include/automerge-c/utils/result.h +30 -0
- data/vendor/automerge-rust/automerge-c/include/automerge-c/utils/stack.h +130 -0
- data/vendor/automerge-rust/automerge-c/include/automerge-c/utils/stack_callback_data.h +53 -0
- data/vendor/automerge-rust/automerge-c/include/automerge-c/utils/string.h +29 -0
- data/vendor/automerge-rust/automerge-c/src/actor_id.rs +193 -0
- data/vendor/automerge-rust/automerge-c/src/byte_span.rs +227 -0
- data/vendor/automerge-rust/automerge-c/src/change.rs +356 -0
- data/vendor/automerge-rust/automerge-c/src/cursor.rs +168 -0
- data/vendor/automerge-rust/automerge-c/src/doc/list.rs +636 -0
- data/vendor/automerge-rust/automerge-c/src/doc/map.rs +556 -0
- data/vendor/automerge-rust/automerge-c/src/doc/mark.rs +296 -0
- data/vendor/automerge-rust/automerge-c/src/doc/utils.rs +46 -0
- data/vendor/automerge-rust/automerge-c/src/doc.rs +1009 -0
- data/vendor/automerge-rust/automerge-c/src/index.rs +84 -0
- data/vendor/automerge-rust/automerge-c/src/item.rs +2177 -0
- data/vendor/automerge-rust/automerge-c/src/items.rs +401 -0
- data/vendor/automerge-rust/automerge-c/src/lib.rs +11 -0
- data/vendor/automerge-rust/automerge-c/src/obj.rs +216 -0
- data/vendor/automerge-rust/automerge-c/src/result.rs +653 -0
- data/vendor/automerge-rust/automerge-c/src/sync/have.rs +42 -0
- data/vendor/automerge-rust/automerge-c/src/sync/message.rs +146 -0
- data/vendor/automerge-rust/automerge-c/src/sync/state.rs +262 -0
- data/vendor/automerge-rust/automerge-c/src/sync.rs +7 -0
- data/vendor/automerge-rust/automerge-c/src/utils/result.c +33 -0
- data/vendor/automerge-rust/automerge-c/src/utils/stack.c +106 -0
- data/vendor/automerge-rust/automerge-c/src/utils/stack_callback_data.c +9 -0
- data/vendor/automerge-rust/automerge-c/src/utils/string.c +46 -0
- data/vendor/automerge-rust/automerge-c/test/CMakeLists.txt +67 -0
- data/vendor/automerge-rust/automerge-c/test/actor_id_tests.c +140 -0
- data/vendor/automerge-rust/automerge-c/test/base_state.c +17 -0
- data/vendor/automerge-rust/automerge-c/test/base_state.h +39 -0
- data/vendor/automerge-rust/automerge-c/test/byte_span_tests.c +119 -0
- data/vendor/automerge-rust/automerge-c/test/cmocka_utils.c +91 -0
- data/vendor/automerge-rust/automerge-c/test/cmocka_utils.h +42 -0
- data/vendor/automerge-rust/automerge-c/test/cursor_tests.c +263 -0
- data/vendor/automerge-rust/automerge-c/test/doc_state.c +27 -0
- data/vendor/automerge-rust/automerge-c/test/doc_state.h +17 -0
- data/vendor/automerge-rust/automerge-c/test/doc_tests.c +335 -0
- data/vendor/automerge-rust/automerge-c/test/enum_string_tests.c +148 -0
- data/vendor/automerge-rust/automerge-c/test/files/brave-ape-49.automerge +0 -0
- data/vendor/automerge-rust/automerge-c/test/item_tests.c +313 -0
- data/vendor/automerge-rust/automerge-c/test/list_tests.c +544 -0
- data/vendor/automerge-rust/automerge-c/test/macro_utils.c +38 -0
- data/vendor/automerge-rust/automerge-c/test/macro_utils.h +23 -0
- data/vendor/automerge-rust/automerge-c/test/main.c +33 -0
- data/vendor/automerge-rust/automerge-c/test/map_tests.c +1610 -0
- data/vendor/automerge-rust/automerge-c/test/mark_tests.c +124 -0
- data/vendor/automerge-rust/automerge-c/test/ported_wasm/basic_tests.c +1642 -0
- data/vendor/automerge-rust/automerge-c/test/ported_wasm/cursor_tests.c +108 -0
- data/vendor/automerge-rust/automerge-c/test/ported_wasm/suite.c +17 -0
- data/vendor/automerge-rust/automerge-c/test/ported_wasm/sync_tests.c +1280 -0
- data/vendor/automerge-rust/automerge-c/test/str_utils.c +15 -0
- data/vendor/automerge-rust/automerge-c/test/str_utils.h +17 -0
- data/vendor/automerge-rust/automerge-test/Cargo.toml +17 -0
- data/vendor/automerge-rust/automerge-test/README.md +3 -0
- data/vendor/automerge-rust/automerge-test/src/lib.rs +487 -0
- data/vendor/automerge-rust/hexane/CHANGELOG.md +34 -0
- data/vendor/automerge-rust/hexane/Cargo.toml +47 -0
- data/vendor/automerge-rust/hexane/README.md +292 -0
- data/vendor/automerge-rust/hexane/RESULTS.txt +20 -0
- data/vendor/automerge-rust/hexane/TODO +18 -0
- data/vendor/automerge-rust/hexane/benches/insert.rs +82 -0
- data/vendor/automerge-rust/hexane/benches/seek.rs +77 -0
- data/vendor/automerge-rust/hexane/benches/splice.rs +82 -0
- data/vendor/automerge-rust/hexane/src/aggregate.rs +288 -0
- data/vendor/automerge-rust/hexane/src/boolean.rs +478 -0
- data/vendor/automerge-rust/hexane/src/columndata.rs +2540 -0
- data/vendor/automerge-rust/hexane/src/cursor.rs +756 -0
- data/vendor/automerge-rust/hexane/src/delta.rs +793 -0
- data/vendor/automerge-rust/hexane/src/encoder.rs +639 -0
- data/vendor/automerge-rust/hexane/src/leb128.rs +82 -0
- data/vendor/automerge-rust/hexane/src/lib.rs +95 -0
- data/vendor/automerge-rust/hexane/src/pack.rs +325 -0
- data/vendor/automerge-rust/hexane/src/raw.rs +314 -0
- data/vendor/automerge-rust/hexane/src/rle.rs +928 -0
- data/vendor/automerge-rust/hexane/src/slab/tree.rs +1373 -0
- data/vendor/automerge-rust/hexane/src/slab/writer.rs +535 -0
- data/vendor/automerge-rust/hexane/src/slab.rs +224 -0
- data/vendor/automerge-rust/hexane/src/test.rs +108 -0
- data/vendor/bundle/ruby/3.3.0/bin/rake +29 -0
- data/vendor/bundle/ruby/3.3.0/bin/rake-compiler +29 -0
- data/vendor/bundle/ruby/3.3.0/bin/rake-compiler-dock +29 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/History.rdoc +1732 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/Manifest.txt +32 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/README.rdoc +845 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/Rakefile +97 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/design_rationale.rb +54 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/hoe/minitest.rb +30 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/assertions.rb +850 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/autorun.rb +6 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/benchmark.rb +452 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/compress.rb +94 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/error_on_warning.rb +11 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/expectations.rb +321 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/hell.rb +11 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/manual_plugins.rb +16 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/mock.rb +327 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/parallel.rb +72 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/pride.rb +4 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/pride_plugin.rb +135 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/spec.rb +353 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/test.rb +238 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/test_task.rb +324 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest/unit.rb +42 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/lib/minitest.rb +1250 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/metametameta.rb +150 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_assertions.rb +1677 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_benchmark.rb +137 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_mock.rb +1213 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_reporter.rb +437 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_spec.rb +1159 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_test.rb +1374 -0
- data/vendor/bundle/ruby/3.3.0/gems/minitest-5.27.0/test/minitest/test_minitest_test_task.rb +57 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/History.rdoc +2454 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/MIT-LICENSE +21 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/README.rdoc +155 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/command_line_usage.rdoc +171 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/Rakefile1 +38 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/Rakefile2 +35 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/a.c +6 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/b.c +6 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/example/main.c +11 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/glossary.rdoc +42 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/jamis.rb +592 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/proto_rake.rdoc +127 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/rake.1 +156 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/rakefile.rdoc +635 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/doc/rational.rdoc +151 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/exe/rake +27 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/application.rb +847 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/backtrace.rb +25 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/clean.rb +78 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/cloneable.rb +17 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/cpu_counter.rb +122 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/default_loader.rb +15 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/dsl_definition.rb +196 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/early_time.rb +22 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/ext/core.rb +26 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/ext/string.rb +176 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_creation_task.rb +25 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_list.rb +435 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_task.rb +58 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_utils.rb +137 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/file_utils_ext.rb +135 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/invocation_chain.rb +57 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/invocation_exception_mixin.rb +17 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/late_time.rb +18 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/linked_list.rb +112 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/loaders/makefile.rb +54 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/multi_task.rb +14 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/name_space.rb +38 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/options.rb +31 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/packagetask.rb +222 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/phony.rb +16 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/private_reader.rb +21 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/promise.rb +100 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/pseudo_status.rb +30 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/rake_module.rb +67 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/rake_test_loader.rb +27 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/rule_recursion_overflow_error.rb +20 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/scope.rb +43 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/task.rb +434 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/task_argument_error.rb +8 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/task_arguments.rb +113 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/task_manager.rb +333 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/tasklib.rb +12 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/testtask.rb +192 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/thread_history_display.rb +49 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/thread_pool.rb +157 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/trace_output.rb +23 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/version.rb +10 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake/win32.rb +17 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/lib/rake.rb +69 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-13.4.2/rake.gemspec +102 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/Gemfile +8 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/History.md +695 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/LICENSE.txt +20 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/README.md +476 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/Rakefile +15 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/appveyor.yml +22 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/bin/rake-compiler +24 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/cucumber.yml +4 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/compile.feature +79 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/cross-compile.feature +23 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/cross-package-multi.feature +15 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/cross-package.feature +14 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/java-compile.feature +22 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/java-no-native-compile.feature +33 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/java-package.feature +24 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/package.feature +40 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/compilation.rb +70 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/cross_compilation.rb +27 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/execution.rb +52 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/folders.rb +32 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/gem.rb +46 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/step_definitions/java_compilation.rb +7 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/support/env.rb +10 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/support/file_template_helpers.rb +137 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/support/generator_helpers.rb +123 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/features/support/platform_extension_helpers.rb +27 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/baseextensiontask.rb +90 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/compiler_config.rb +38 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/extensioncompiler.rb +51 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/extensiontask.rb +589 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/lib/rake/javaextensiontask.rb +321 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/bin/cross-ruby.rake +189 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/bootstrap.rake +11 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/common.rake +10 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/cucumber.rake +23 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/gem.rake +15 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-1.3.1/tasks/rspec.rake +9 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/CHANGELOG.md +446 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/CONTRIBUTING.md +109 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/Dockerfile.jruby +79 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/Dockerfile.mri.erb +282 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/Gemfile +8 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/LICENSE.txt +22 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/README.md +447 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/Rakefile +246 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/bin/rake-compiler-dock +18 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/buildkitd.toml +2 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/gem_helper.rb +54 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/mk_i686.rb +18 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/mk_musl_cross.sh +37 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/mk_osxcross.sh +45 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/mk_pkg_config.sh +24 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/parallel_docker_build.rb +169 -0
- 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
- 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
- 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
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/rcd-env.sh +6 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/runas +7 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/sigfw.c +45 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/strip_wrapper_codesign +17 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/strip_wrapper_vbox +30 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/build/sudoers +1 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/colors.rb +43 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/docker_check.rb +356 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/predefined_user_group.rb +5 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/starter.rb +206 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/version.rb +4 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock.rb +151 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/Dockerfile +66 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/README.md +14 -0
- 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
- 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
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/mingw-w64-enable-ucrt.patch +22 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/rake-compiler-dock.gemspec +34 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/env/Dockerfile.alpine +17 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/env/Dockerfile.debian +24 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/fixtures/mig_test_rpc.defs +8 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/Gemfile +11 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/Rakefile +97 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/java/RcdTestExtService.java +19 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/java/RubyRcdTest.java +16 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/extconf.rb +111 -0
- 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
- 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
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/lib/rcd_test.rb +6 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/rcd_test.gemspec +28 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/test/test_basic.rb +49 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_environment_variables.rb +108 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_mig.rb +18 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_parallel_docker_build.rb +95 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_rubygems_plugins.rb +12 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_starter.rb +158 -0
- data/vendor/bundle/ruby/3.3.0/gems/rake-compiler-dock-1.12.0/test/test_versions.rb +82 -0
- data/vendor/bundle/ruby/3.3.0/specifications/minitest-5.27.0.gemspec +32 -0
- data/vendor/bundle/ruby/3.3.0/specifications/rake-13.4.2.gemspec +26 -0
- data/vendor/bundle/ruby/3.3.0/specifications/rake-compiler-1.3.1.gemspec +33 -0
- data/vendor/bundle/ruby/3.3.0/specifications/rake-compiler-dock-1.12.0.gemspec +28 -0
- 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
|
+
}
|