@layerzerolabs/protocol-stellar-v2 0.2.21 → 0.2.23
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.
- package/.turbo/turbo-build.log +347 -271
- package/.turbo/turbo-lint.log +277 -208
- package/.turbo/turbo-test.log +1700 -1370
- package/Cargo.lock +22 -51
- package/Cargo.toml +6 -1
- package/contracts/common-macros/src/auth.rs +10 -9
- package/contracts/common-macros/src/contract_ttl.rs +1 -4
- package/contracts/common-macros/src/error.rs +1 -3
- package/contracts/common-macros/src/lib.rs +65 -61
- package/contracts/common-macros/src/storage.rs +212 -65
- package/contracts/common-macros/src/tests/auth.rs +75 -6
- package/contracts/common-macros/src/tests/contract_ttl.rs +383 -350
- package/contracts/common-macros/src/tests/error.rs +9 -21
- package/contracts/common-macros/src/tests/lz_contract.rs +80 -0
- package/contracts/common-macros/src/tests/mod.rs +2 -0
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_multisig_code.snap +20 -3
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_ownable_code.snap +28 -1
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_ttl__snapshot_generated_contractimpl_code.snap +8 -43
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_ttl__snapshot_generated_contracttrait_code.snap +6 -29
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__lz_contract__snapshot_generated_lz_contract_code.snap +31 -0
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ttl_extendable__snapshot_generated_ttl_extendable_code.snap +8 -0
- package/contracts/common-macros/src/tests/storage/extract_fields.rs +87 -0
- package/contracts/common-macros/src/tests/storage/gen_accessor_methods.rs +223 -0
- package/contracts/common-macros/src/tests/storage/gen_args.rs +65 -0
- package/contracts/common-macros/src/tests/storage/gen_enum_variant.rs +78 -0
- package/contracts/common-macros/src/tests/storage/gen_key.rs +108 -0
- package/contracts/common-macros/src/tests/storage/gen_params.rs +105 -0
- package/contracts/common-macros/src/tests/{storage.rs → storage/generate_storage.rs} +54 -129
- package/contracts/common-macros/src/tests/storage/is_primitive_type.rs +48 -0
- package/contracts/common-macros/src/tests/storage/mod.rs +16 -0
- package/contracts/common-macros/src/tests/storage/parse_default.rs +164 -0
- package/contracts/common-macros/src/tests/storage/parse_name.rs +159 -0
- package/contracts/common-macros/src/tests/storage/parse_no_ttl_extension.rs +124 -0
- package/contracts/common-macros/src/tests/storage/parse_storage_type.rs +174 -0
- package/contracts/common-macros/src/tests/storage/snapshots/common_macros__tests__storage__generate_storage__snapshot_generated_storage_code.snap +412 -0
- package/contracts/common-macros/src/tests/storage/storage_kind.rs +39 -0
- package/contracts/common-macros/src/tests/storage/test_setup.rs +25 -0
- package/contracts/common-macros/src/tests/storage/validate_attrs.rs +138 -0
- package/contracts/common-macros/src/tests/storage/variant_config.rs +226 -0
- package/contracts/common-macros/src/tests/test_helpers.rs +4 -10
- package/contracts/common-macros/src/tests/ttl_configurable.rs +2 -2
- package/contracts/common-macros/src/tests/ttl_extendable.rs +32 -0
- package/contracts/common-macros/src/tests/upgradeable.rs +118 -2
- package/contracts/common-macros/src/ttl_configurable.rs +1 -4
- package/contracts/common-macros/src/upgradeable.rs +21 -3
- package/contracts/endpoint-v2/Cargo.toml +0 -4
- package/contracts/endpoint-v2/src/endpoint_v2.rs +37 -17
- package/contracts/endpoint-v2/src/errors.rs +26 -1
- package/contracts/endpoint-v2/src/interfaces/layerzero_endpoint_v2.rs +1 -1
- package/contracts/endpoint-v2/src/interfaces/message_lib_manager.rs +4 -4
- package/contracts/endpoint-v2/src/interfaces/messaging_composer.rs +2 -2
- package/contracts/endpoint-v2/src/lib.rs +0 -1
- package/contracts/endpoint-v2/src/message_lib_manager.rs +39 -8
- package/contracts/endpoint-v2/src/messaging_channel.rs +36 -4
- package/contracts/endpoint-v2/src/messaging_composer.rs +18 -4
- package/contracts/endpoint-v2/src/storage.rs +9 -1
- package/contracts/endpoint-v2/src/tests/endpoint_setup.rs +2 -2
- package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +1 -1
- package/contracts/endpoint-v2/src/tests/endpoint_v2/require_oapp_auth.rs +2 -2
- package/contracts/endpoint-v2/src/tests/message_lib_manager/register_library.rs +3 -3
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_receive_lib_for_eid.rs +5 -5
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_registered.rs +2 -2
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_send_lib_for_eid.rs +5 -5
- package/contracts/endpoint-v2/src/tests/message_lib_manager/require_supported_eid.rs +3 -3
- package/contracts/endpoint-v2/src/tests/messaging_channel/nilify.rs +1 -1
- package/contracts/endpoint-v2/src/tests/messaging_composer/clear_compose.rs +4 -3
- package/contracts/endpoint-v2/src/tests/messaging_composer/lz_compose_alert.rs +7 -2
- package/contracts/endpoint-v2/src/tests/messaging_composer/mod.rs +4 -0
- package/contracts/endpoint-v2/src/tests/messaging_composer/send_compose.rs +7 -2
- package/contracts/layerzero-views/src/layerzero_view.rs +0 -1
- package/contracts/layerzero-views/src/tests/mod.rs +1 -0
- package/contracts/layerzero-views/src/tests/types_tests.rs +31 -0
- package/contracts/layerzero-views/src/types.rs +2 -3
- package/contracts/macro-integration-tests/tests/runtime/contract_ttl/constructor.rs +61 -0
- package/contracts/macro-integration-tests/tests/runtime/contract_ttl/contract_impl_ttl_extension.rs +97 -0
- package/contracts/macro-integration-tests/tests/runtime/contract_ttl/contract_trait_ttl_extension.rs +99 -0
- package/contracts/macro-integration-tests/tests/runtime/contract_ttl/mod.rs +3 -0
- package/contracts/macro-integration-tests/tests/runtime/lz_contract/mod.rs +5 -0
- package/contracts/macro-integration-tests/tests/runtime/lz_contract/wrapper_default.rs +86 -0
- package/contracts/macro-integration-tests/tests/runtime/lz_contract/wrapper_multisig.rs +47 -0
- package/contracts/macro-integration-tests/tests/runtime/lz_contract/wrapper_multisig_upgradeable.rs +77 -0
- package/contracts/macro-integration-tests/tests/runtime/lz_contract/wrapper_upgradeable.rs +114 -0
- package/contracts/macro-integration-tests/tests/runtime/lz_contract/wrapper_upgradeable_no_migration.rs +105 -0
- package/contracts/macro-integration-tests/tests/runtime/multisig/admin_entrypoints.rs +242 -0
- package/contracts/macro-integration-tests/tests/runtime/multisig/mod.rs +9 -0
- package/contracts/macro-integration-tests/tests/runtime/multisig/self_auth.rs +54 -0
- package/contracts/macro-integration-tests/tests/runtime/ownable/initialization.rs +13 -0
- package/contracts/macro-integration-tests/tests/runtime/ownable/mod.rs +1 -0
- package/contracts/macro-integration-tests/tests/runtime/ownable/ownership_transfer.rs +70 -1
- package/contracts/macro-integration-tests/tests/runtime/ownable/two_step_transfer.rs +219 -0
- package/contracts/macro-integration-tests/tests/runtime/storage/keyed_roundtrip.rs +41 -0
- package/contracts/macro-integration-tests/tests/runtime/storage/ttl_extension.rs +48 -16
- package/contracts/macro-integration-tests/tests/runtime/storage/unkeyed_roundtrip.rs +10 -0
- package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/configuration.rs +96 -3
- package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/freeze.rs +4 -0
- package/contracts/macro-integration-tests/tests/runtime/ttl_extendable/extend_instance_ttl.rs +64 -0
- package/contracts/macro-integration-tests/tests/runtime/ttl_extendable/mod.rs +16 -0
- package/contracts/macro-integration-tests/tests/runtime/upgradeable/migrate_guard_and_state.rs +305 -0
- package/contracts/macro-integration-tests/tests/runtime/upgradeable/mod.rs +3 -0
- package/contracts/macro-integration-tests/tests/runtime/upgradeable/no_migration.rs +59 -0
- package/contracts/macro-integration-tests/tests/runtime/upgradeable/upgrade_then_migrate.rs +88 -0
- package/contracts/macro-integration-tests/tests/runtime.rs +5 -0
- package/contracts/macro-integration-tests/tests/ui/contract_impl/fail/not_impl_item.rs +6 -0
- package/contracts/macro-integration-tests/tests/ui/contract_impl/fail/not_impl_item.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/contract_impl/pass/basic.rs +102 -0
- package/contracts/macro-integration-tests/tests/ui/contract_trait/fail/not_a_trait.rs +6 -0
- package/contracts/macro-integration-tests/tests/ui/contract_trait/fail/not_a_trait.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/contract_trait/pass/basic.rs +83 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/discriminant_too_large.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/discriminant_too_large.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/non_enum_input.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui/error/fail/non_enum_input.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/error/pass/basic.rs +22 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/invalid_option.rs +6 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/invalid_option.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/multisig_rejects_ownable_api.rs +20 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/multisig_rejects_ownable_api.stderr +20 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/not_a_struct.rs +8 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/not_a_struct.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/upgradeable_invalid_inner_option.rs +10 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/upgradeable_invalid_inner_option.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/upgradeable_missing_internal.rs +20 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/upgradeable_missing_internal.stderr +86 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/pass/basic.rs +45 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/pass/multisig.rs +34 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/pass/multisig_upgradeable.rs +30 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/pass/upgradeable.rs +39 -0
- package/contracts/macro-integration-tests/tests/ui/lz_contract/pass/upgradeable_no_migration.rs +28 -0
- package/contracts/macro-integration-tests/tests/ui/multisig/fail/non_struct_input.rs +8 -0
- package/contracts/macro-integration-tests/tests/ui/multisig/fail/non_struct_input.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/multisig/fail/rejects_ownable_api.rs +20 -0
- package/contracts/macro-integration-tests/tests/ui/multisig/fail/rejects_ownable_api.stderr +12 -0
- package/contracts/macro-integration-tests/tests/ui/multisig/fail/rejects_ownable_trait.rs +20 -0
- package/contracts/macro-integration-tests/tests/ui/multisig/fail/rejects_ownable_trait.stderr +5 -0
- package/contracts/macro-integration-tests/tests/ui/multisig/pass/basic.rs +49 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/fail/non_struct_input.rs +8 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/fail/non_struct_input.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_auth.rs +19 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_auth.stderr +12 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_env.rs +1 -1
- package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_env.stderr +0 -8
- package/contracts/macro-integration-tests/tests/ui/ownable/pass/basic.rs +39 -0
- package/contracts/macro-integration-tests/tests/ui/ownable/pass/only_auth_env_param_variants.rs +7 -1
- package/contracts/macro-integration-tests/tests/ui/storage/fail/invalid_storage_type_param.stderr +1 -1
- package/contracts/macro-integration-tests/tests/ui/storage/fail/missing_storage_type_param.stderr +1 -1
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_default_values.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_default_values.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_name_attrs.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_name_attrs.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_no_ttl_extension.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_no_ttl_extension.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_type_params.stderr +1 -1
- package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_rejects_args.rs +13 -0
- package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_rejects_args.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/api_surface.rs +102 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/basic.rs +43 -0
- package/contracts/macro-integration-tests/tests/ui/storage/pass/multi_key.rs +38 -0
- package/contracts/macro-integration-tests/tests/ui/ttl_configurable/fail/missing_auth_trait.rs +14 -0
- package/contracts/macro-integration-tests/tests/ui/ttl_configurable/fail/missing_auth_trait.stderr +71 -0
- package/contracts/macro-integration-tests/tests/ui/ttl_configurable/fail/non_struct_input.rs +8 -0
- package/contracts/macro-integration-tests/tests/ui/ttl_configurable/fail/non_struct_input.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/{minimal_contract.rs → basic.rs} +2 -0
- package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/multisig_contract.rs +28 -0
- package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/ownable_contract.rs +32 -0
- package/contracts/macro-integration-tests/tests/ui/ttl_extendable/fail/non_struct_input.rs +8 -0
- package/contracts/macro-integration-tests/tests/ui/ttl_extendable/fail/non_struct_input.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/ttl_extendable/pass/basic.rs +23 -0
- package/contracts/macro-integration-tests/tests/ui/ttl_extendable/pass/no_user_contractimpl.rs +21 -0
- package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/attr_args.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/attr_args.stderr +29 -0
- package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/missing_auth_trait.rs +20 -0
- package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/missing_auth_trait.stderr +71 -0
- package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/missing_upgradeable_internal.rs +10 -0
- package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/missing_upgradeable_internal.stderr +79 -0
- package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/non_struct_input.rs +8 -0
- package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/non_struct_input.stderr +7 -0
- package/contracts/macro-integration-tests/tests/ui/upgradeable/pass/basic.rs +43 -0
- package/contracts/macro-integration-tests/tests/ui/upgradeable/pass/multisig_contract.rs +35 -0
- package/contracts/macro-integration-tests/tests/ui/upgradeable/pass/no_migration.rs +30 -0
- package/contracts/macro-integration-tests/tests/ui/upgradeable/pass/no_user_contractimpl.rs +29 -0
- package/contracts/macro-integration-tests/tests/ui_contract_impl.rs +12 -0
- package/contracts/macro-integration-tests/tests/ui_contract_trait.rs +12 -0
- package/contracts/macro-integration-tests/tests/ui_lz_contract.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui_multisig.rs +11 -0
- package/contracts/macro-integration-tests/tests/ui_ttl_extendable.rs +12 -0
- package/contracts/macro-integration-tests/tests/ui_upgradeable.rs +11 -0
- package/contracts/message-libs/blocked-message-lib/Cargo.toml +1 -1
- package/contracts/message-libs/blocked-message-lib/src/lib.rs +4 -1
- package/contracts/message-libs/blocked-message-lib/src/tests/blocked_message_lib_tests.rs +108 -0
- package/contracts/message-libs/blocked-message-lib/src/tests/mod.rs +4 -0
- package/contracts/message-libs/blocked-message-lib/src/tests/setup.rs +40 -0
- package/contracts/message-libs/simple-message-lib/src/lib.rs +1 -1
- package/contracts/message-libs/simple-message-lib/src/tests/mod.rs +2 -0
- package/contracts/message-libs/simple-message-lib/src/tests/setup.rs +124 -0
- package/contracts/message-libs/simple-message-lib/src/tests/simple_message_lib_tests.rs +309 -0
- package/contracts/message-libs/uln-302/src/errors.rs +21 -0
- package/contracts/message-libs/uln-302/src/interfaces/receive_uln.rs +1 -1
- package/contracts/message-libs/uln-302/src/receive_uln.rs +6 -4
- package/contracts/message-libs/uln-302/src/send_uln.rs +15 -6
- package/contracts/message-libs/uln-302/src/storage.rs +5 -5
- package/contracts/message-libs/uln-302/src/tests/uln302/get_config.rs +71 -0
- package/contracts/message-libs/uln-302/src/tests/uln302/mod.rs +1 -0
- package/contracts/message-libs/uln-302/src/uln302.rs +3 -0
- package/contracts/oapps/counter/Cargo.toml +2 -0
- package/contracts/oapps/counter/integration_tests/mod.rs +1 -0
- package/contracts/oapps/counter/integration_tests/setup_sml.rs +6 -4
- package/contracts/oapps/counter/integration_tests/setup_uln.rs +12 -5
- package/contracts/oapps/counter/integration_tests/test_with_blocked.rs +67 -0
- package/contracts/oapps/counter/src/tests/mod.rs +1 -0
- package/contracts/oapps/counter/src/tests/test_u256_ext.rs +48 -0
- package/contracts/oapps/oapp/src/lib.rs +0 -3
- package/contracts/oapps/oapp/src/tests/mod.rs +1 -0
- package/contracts/oapps/oft/integration-tests/setup.rs +2 -3
- package/contracts/oapps/oft/src/lib.rs +3 -0
- package/contracts/oapps/oft/src/tests/extensions/mod.rs +3 -0
- package/contracts/oapps/oft/src/tests/extensions/oft_fee.rs +240 -0
- package/contracts/oapps/oft/src/tests/extensions/pausable.rs +141 -0
- package/contracts/oapps/oft/src/tests/extensions/rate_limiter.rs +447 -0
- package/contracts/oapps/oft/src/tests/mod.rs +2 -0
- package/contracts/oapps/oft/src/tests/oft_types/lock_unlock.rs +180 -0
- package/contracts/oapps/oft/src/tests/oft_types/mod.rs +1 -0
- package/contracts/oapps/oft-core/integration-tests/setup.rs +2 -3
- package/contracts/oapps/oft-core/src/lib.rs +2 -2
- package/contracts/oapps/oft-core/src/tests/mod.rs +1 -1
- package/contracts/oapps/oft-core/src/tests/{test_oft_version.rs → test_oft_version_and_approval.rs} +9 -0
- package/contracts/oapps/oft-core/src/tests/test_utils.rs +0 -43
- package/contracts/upgrader/src/tests/test_upgrader.rs +18 -0
- package/contracts/utils/src/auth.rs +2 -2
- package/contracts/utils/src/buffer_reader.rs +61 -10
- package/contracts/utils/src/buffer_writer.rs +35 -20
- package/contracts/utils/src/bytes_ext.rs +1 -2
- package/contracts/utils/src/errors.rs +5 -3
- package/contracts/utils/src/multisig.rs +59 -36
- package/contracts/utils/src/option_ext.rs +3 -3
- package/contracts/utils/src/ownable.rs +12 -6
- package/contracts/utils/src/tests/auth.rs +179 -0
- package/contracts/utils/src/tests/buffer_reader.rs +203 -1
- package/contracts/utils/src/tests/buffer_writer.rs +176 -5
- package/contracts/utils/src/tests/mod.rs +2 -0
- package/contracts/utils/src/tests/multisig.rs +170 -141
- package/contracts/utils/src/tests/option_ext.rs +1 -1
- package/contracts/utils/src/tests/ownable.rs +156 -161
- package/contracts/utils/src/tests/test_helper.rs +21 -1
- package/contracts/utils/src/tests/testing_utils.rs +84 -2
- package/contracts/utils/src/tests/ttl_configurable.rs +66 -86
- package/contracts/utils/src/tests/ttl_extendable.rs +64 -0
- package/contracts/utils/src/tests/upgradeable.rs +115 -6
- package/contracts/utils/src/ttl_configurable.rs +22 -12
- package/contracts/utils/src/ttl_extendable.rs +1 -3
- package/contracts/utils/src/upgradeable.rs +21 -24
- package/contracts/workers/dvn/src/auth.rs +1 -1
- package/contracts/workers/dvn/src/interfaces/dvn.rs +2 -2
- package/contracts/workers/dvn/src/storage.rs +1 -1
- package/contracts/workers/dvn/src/tests/auth.rs +136 -3
- package/contracts/workers/dvn/src/tests/mod.rs +0 -1
- package/contracts/workers/dvn/src/tests/setup.rs +4 -10
- package/contracts/workers/executor-helper/src/tests/executor_helper.rs +279 -0
- package/contracts/workers/executor-helper/src/tests/setup.rs +106 -1
- package/contracts/workers/worker/src/worker.rs +1 -1
- package/docs/oft-guide.md +5 -5
- package/package.json +5 -7
- package/sdk/.turbo/turbo-test.log +662 -466
- package/sdk/LICENSE +23 -0
- package/sdk/dist/generated/bml.d.ts +101 -106
- package/sdk/dist/generated/bml.js +108 -26
- package/sdk/dist/generated/counter.d.ts +123 -484
- package/sdk/dist/generated/counter.js +103 -25
- package/sdk/dist/generated/dvn.d.ts +141 -699
- package/sdk/dist/generated/dvn.js +106 -28
- package/sdk/dist/generated/dvn_fee_lib.d.ts +31 -248
- package/sdk/dist/generated/dvn_fee_lib.js +27 -24
- package/sdk/dist/generated/endpoint.d.ts +158 -836
- package/sdk/dist/generated/endpoint.js +107 -29
- package/sdk/dist/generated/executor.d.ts +139 -671
- package/sdk/dist/generated/executor.js +106 -28
- package/sdk/dist/generated/executor_fee_lib.d.ts +109 -264
- package/sdk/dist/generated/executor_fee_lib.js +106 -28
- package/sdk/dist/generated/executor_helper.d.ts +95 -92
- package/sdk/dist/generated/executor_helper.js +103 -25
- package/sdk/dist/generated/layerzero_view.d.ts +178 -335
- package/sdk/dist/generated/layerzero_view.js +172 -33
- package/sdk/dist/generated/oft.d.ts +137 -680
- package/sdk/dist/generated/oft.js +103 -25
- package/sdk/dist/generated/price_feed.d.ts +45 -444
- package/sdk/dist/generated/price_feed.js +27 -24
- package/sdk/dist/generated/sml.d.ts +119 -428
- package/sdk/dist/generated/sml.js +103 -25
- package/sdk/dist/generated/treasury.d.ts +109 -288
- package/sdk/dist/generated/treasury.js +103 -25
- package/sdk/dist/generated/uln302.d.ts +190 -527
- package/sdk/dist/generated/uln302.js +170 -31
- package/sdk/dist/generated/upgrader.d.ts +14 -34
- package/sdk/dist/generated/upgrader.js +24 -21
- package/sdk/package.json +3 -4
- package/sdk/test/counter-sml.test.ts +218 -142
- package/sdk/test/counter-uln.test.ts +189 -145
- package/sdk/test/oft-sml.test.ts +173 -156
- package/sdk/test/suites/constants.ts +7 -1
- package/sdk/test/suites/globalSetup.ts +140 -74
- package/sdk/turbo.json +1 -1
- package/tools/ts-bindings-gen/Cargo.toml +4 -4
- package/tools/ts-bindings-gen/src/main.rs +4 -0
- package/turbo.json +3 -0
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__storage__snapshot_generated_storage_code.snap +0 -1072
- package/contracts/endpoint-v2/src/constants.rs +0 -52
- package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.rs +0 -12
- package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.stderr +0 -7
- package/contracts/macro-integration-tests/tests/ui/error/pass/attr_on_variant_allowed.rs +0 -20
- package/contracts/macro-integration-tests/tests/ui/error/pass/basic_auto_discriminants.rs +0 -15
- package/contracts/macro-integration-tests/tests/ui/error/pass/mixed_discriminants.rs +0 -16
- package/contracts/macro-integration-tests/tests/ui/ownable/pass/minimal_contract.rs +0 -26
- package/contracts/macro-integration-tests/tests/ui/ownable/pass/namespacing_and_imports.rs +0 -21
- package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.rs +0 -12
- package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.stderr +0 -7
- package/contracts/macro-integration-tests/tests/ui/storage/pass/default_value_on_variant.rs +0 -14
- package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_instance_unit_basic.rs +0 -14
- package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_persistent_named_fields_keyed.rs +0 -16
- package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_temporary_unit_option.rs +0 -15
- package/contracts/macro-integration-tests/tests/ui/storage/pass/name_override.rs +0 -14
- package/contracts/macro-integration-tests/tests/ui/storage/pass/no_auto_ttl_extension.rs +0 -19
- package/contracts/macro-integration-tests/tests/ui/storage/pass/ttl_provider_basic.rs +0 -15
- package/contracts/message-libs/simple-message-lib/src/test.rs +0 -280
- package/contracts/oapps/oapp/src/macro_tests/mod.rs +0 -1
- package/contracts/workers/dvn/src/tests/multisig/mod.rs +0 -3
- package/contracts/workers/dvn/src/tests/multisig/set_signer.rs +0 -132
- package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +0 -109
- package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +0 -106
- /package/contracts/oapps/oapp/src/{macro_tests → tests}/test_macros.rs +0 -0
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
use quote::quote;
|
|
2
2
|
|
|
3
|
-
use crate::tests::test_helpers::{assert_panics_contains,
|
|
3
|
+
use crate::tests::test_helpers::{assert_panics_contains, filter_item_inputs_excluding_labels};
|
|
4
4
|
|
|
5
5
|
#[test]
|
|
6
6
|
fn test_non_enum_input() {
|
|
7
|
-
for (case, input) in
|
|
7
|
+
for (case, input) in filter_item_inputs_excluding_labels(&["enum"]) {
|
|
8
8
|
assert_panics_contains(case, "failed to parse enum", || {
|
|
9
|
-
crate::storage::generate_storage(
|
|
9
|
+
crate::storage::generate_storage(input.clone());
|
|
10
10
|
});
|
|
11
11
|
}
|
|
12
12
|
}
|
|
@@ -36,7 +36,7 @@ fn test_tuple_variant_rejected() {
|
|
|
36
36
|
|
|
37
37
|
for (case, input) in cases {
|
|
38
38
|
assert_panics_contains(case, "only unit variants or named fields are supported", || {
|
|
39
|
-
crate::storage::generate_storage(
|
|
39
|
+
crate::storage::generate_storage(input.clone());
|
|
40
40
|
});
|
|
41
41
|
}
|
|
42
42
|
}
|
|
@@ -62,9 +62,20 @@ fn test_attribute_errors() {
|
|
|
62
62
|
}
|
|
63
63
|
},
|
|
64
64
|
),
|
|
65
|
+
(
|
|
66
|
+
"invalid storage type with another valid storage type",
|
|
67
|
+
"failed to parse storage type",
|
|
68
|
+
quote! {
|
|
69
|
+
enum TestEnum {
|
|
70
|
+
#[persistent(u32)]
|
|
71
|
+
#[instance]
|
|
72
|
+
Counter,
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
),
|
|
65
76
|
(
|
|
66
77
|
"missing type param",
|
|
67
|
-
"failed to parse storage
|
|
78
|
+
"failed to parse storage type for",
|
|
68
79
|
quote! {
|
|
69
80
|
enum TestEnum {
|
|
70
81
|
#[instance]
|
|
@@ -74,7 +85,7 @@ fn test_attribute_errors() {
|
|
|
74
85
|
),
|
|
75
86
|
(
|
|
76
87
|
"invalid type param",
|
|
77
|
-
"failed to parse storage
|
|
88
|
+
"failed to parse storage type for",
|
|
78
89
|
quote! {
|
|
79
90
|
enum TestEnum {
|
|
80
91
|
#[persistent(u32, String)]
|
|
@@ -86,7 +97,7 @@ fn test_attribute_errors() {
|
|
|
86
97
|
|
|
87
98
|
for (case, expected, input) in cases_storage_type {
|
|
88
99
|
assert_panics_contains(case, expected, || {
|
|
89
|
-
crate::storage::generate_storage(
|
|
100
|
+
crate::storage::generate_storage(input.clone());
|
|
90
101
|
});
|
|
91
102
|
}
|
|
92
103
|
|
|
@@ -140,7 +151,7 @@ fn test_attribute_errors() {
|
|
|
140
151
|
|
|
141
152
|
for (case, expected, input) in cases_default {
|
|
142
153
|
assert_panics_contains(case, expected, || {
|
|
143
|
-
crate::storage::generate_storage(
|
|
154
|
+
crate::storage::generate_storage(input.clone());
|
|
144
155
|
});
|
|
145
156
|
}
|
|
146
157
|
|
|
@@ -194,7 +205,7 @@ fn test_attribute_errors() {
|
|
|
194
205
|
|
|
195
206
|
for (case, expected, input) in cases_name {
|
|
196
207
|
assert_panics_contains(case, expected, || {
|
|
197
|
-
crate::storage::generate_storage(
|
|
208
|
+
crate::storage::generate_storage(input.clone());
|
|
198
209
|
});
|
|
199
210
|
}
|
|
200
211
|
|
|
@@ -206,11 +217,22 @@ fn test_attribute_errors() {
|
|
|
206
217
|
Counter,
|
|
207
218
|
}
|
|
208
219
|
};
|
|
209
|
-
crate::storage::generate_storage(
|
|
220
|
+
crate::storage::generate_storage(input);
|
|
210
221
|
});
|
|
211
222
|
|
|
212
223
|
// Test #[no_ttl_extension] validation
|
|
213
224
|
let cases_no_ttl = vec![
|
|
225
|
+
(
|
|
226
|
+
"no_ttl_extension does not accept arguments",
|
|
227
|
+
"does not accept arguments",
|
|
228
|
+
quote! {
|
|
229
|
+
enum TestEnum {
|
|
230
|
+
#[persistent(u32)]
|
|
231
|
+
#[no_ttl_extension(foo)]
|
|
232
|
+
Counter,
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
),
|
|
214
236
|
(
|
|
215
237
|
"multiple no_ttl_extension",
|
|
216
238
|
"multiple #[no_ttl_extension]",
|
|
@@ -310,26 +332,7 @@ fn test_attribute_errors() {
|
|
|
310
332
|
|
|
311
333
|
for (case, expected, input) in cases_no_ttl {
|
|
312
334
|
assert_panics_contains(case, expected, || {
|
|
313
|
-
crate::storage::generate_storage(
|
|
314
|
-
});
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
// Test that #[storage] does not accept arguments
|
|
318
|
-
let cases_attr = vec![
|
|
319
|
-
("unknown arg", "does not accept arguments", quote! { unknown }),
|
|
320
|
-
("key-value arg", "does not accept arguments", quote! { unknown = SomeType }),
|
|
321
|
-
("function-like arg", "does not accept arguments", quote! { foo(bar) }),
|
|
322
|
-
];
|
|
323
|
-
let input = quote! {
|
|
324
|
-
enum TestEnum {
|
|
325
|
-
#[instance(u32)]
|
|
326
|
-
Counter,
|
|
327
|
-
}
|
|
328
|
-
};
|
|
329
|
-
|
|
330
|
-
for (case, expected, attr) in cases_attr {
|
|
331
|
-
assert_panics_contains(case, expected, || {
|
|
332
|
-
crate::storage::generate_storage(attr.clone(), input.clone());
|
|
335
|
+
crate::storage::generate_storage(input.clone());
|
|
333
336
|
});
|
|
334
337
|
}
|
|
335
338
|
}
|
|
@@ -340,146 +343,68 @@ fn test_attribute_errors() {
|
|
|
340
343
|
|
|
341
344
|
/// Comprehensive snapshot test covering all storage macro features:
|
|
342
345
|
/// - All storage types: instance, persistent, temporary
|
|
343
|
-
/// - Unit variants and named field variants
|
|
346
|
+
/// - Unit variants and named field variants (single and multiple fields)
|
|
344
347
|
/// - Default values (with and without)
|
|
345
|
-
/// - TTL extension control (
|
|
348
|
+
/// - TTL extension control (auto for persistent, opt-out with #[no_ttl_extension])
|
|
346
349
|
/// - Custom name attribute
|
|
347
|
-
/// -
|
|
348
|
-
/// - Primitive
|
|
349
|
-
///
|
|
350
|
-
///
|
|
351
|
-
///
|
|
350
|
+
/// - snake_case naming conversion (TempData -> temp_data)
|
|
351
|
+
/// - Primitive vs non-primitive key types (by value vs by reference + clone)
|
|
352
|
+
///
|
|
353
|
+
/// Note: Primitive type detection is exhaustively tested in test_is_primitive_type_* unit tests.
|
|
354
|
+
/// This snapshot only needs one of each to verify the generated code integrates correctly.
|
|
352
355
|
#[test]
|
|
353
356
|
fn snapshot_generated_storage_code() {
|
|
354
357
|
let input = quote! {
|
|
355
358
|
/// Enum-level doc comment
|
|
356
359
|
pub enum StorageKeys {
|
|
357
|
-
/// Instance storage with default value
|
|
360
|
+
/// Instance storage with default value
|
|
358
361
|
#[instance(u32)]
|
|
359
362
|
#[default(0)]
|
|
360
363
|
Counter,
|
|
361
364
|
|
|
362
|
-
/// Persistent storage with
|
|
365
|
+
/// Persistent storage with single field and default (auto TTL)
|
|
363
366
|
#[persistent(String)]
|
|
364
|
-
#[default("hello"
|
|
367
|
+
#[default(String::from_str(env, "hello"))]
|
|
365
368
|
Message { sender: Address },
|
|
366
369
|
|
|
367
|
-
/// Temporary storage
|
|
370
|
+
/// Temporary storage with single field
|
|
368
371
|
#[temporary(bool)]
|
|
369
372
|
Flag { key: String },
|
|
370
373
|
|
|
371
|
-
/// Persistent storage with multiple fields (no default)
|
|
372
|
-
#[persistent(Vec<u8>)]
|
|
373
|
-
Data { id: u64, name: String },
|
|
374
|
-
|
|
375
374
|
/// Persistent storage without fields or default
|
|
376
375
|
#[persistent(Address)]
|
|
377
376
|
Owner,
|
|
378
377
|
|
|
379
|
-
///
|
|
378
|
+
/// Custom #[name()] override
|
|
380
379
|
#[persistent(Option<Address>)]
|
|
381
380
|
#[name("custom_key_name")]
|
|
382
381
|
OptionalData { key: BytesN<32> },
|
|
383
382
|
|
|
384
|
-
/// Temporary storage (
|
|
383
|
+
/// Temporary storage unit variant (also tests snake_case: TempData -> temp_data)
|
|
385
384
|
#[temporary(u64)]
|
|
386
385
|
TempData,
|
|
387
386
|
|
|
388
|
-
///
|
|
387
|
+
/// Primitive key type: passed by value, no clone
|
|
389
388
|
#[persistent(u32)]
|
|
390
|
-
|
|
389
|
+
PrimitiveKey { key: u32 },
|
|
391
390
|
|
|
392
|
-
///
|
|
393
|
-
#[
|
|
394
|
-
|
|
395
|
-
AnotherVariant { key: Address },
|
|
396
|
-
|
|
397
|
-
/// Test primitive types: passed by value, not cloned
|
|
398
|
-
#[persistent(u32)]
|
|
399
|
-
U32Value { key: u32 },
|
|
400
|
-
#[persistent(i64)]
|
|
401
|
-
I64Value { key: i64 },
|
|
402
|
-
#[persistent(bool)]
|
|
403
|
-
BoolValue { key: bool },
|
|
404
|
-
|
|
405
|
-
/// Test non-primitive types: passed by reference, cloned
|
|
406
|
-
#[persistent(u32)]
|
|
407
|
-
U8Value { key: u8 },
|
|
408
|
-
#[persistent(u32)]
|
|
409
|
-
UsizeValue { key: usize },
|
|
410
|
-
#[persistent(String)]
|
|
411
|
-
StringValue { key: String },
|
|
412
|
-
#[persistent(Vec<u32>)]
|
|
413
|
-
VecValue { key: Vec<u32> },
|
|
414
|
-
#[persistent(Address)]
|
|
415
|
-
AddressValue { key: Address },
|
|
416
|
-
|
|
417
|
-
/// Test Unit variant: no fields
|
|
418
|
-
#[persistent(u32)]
|
|
419
|
-
UnitVariant,
|
|
391
|
+
/// Non-primitive key type: passed by reference, cloned
|
|
392
|
+
#[instance(u32)]
|
|
393
|
+
NonPrimitiveKey { key: String },
|
|
420
394
|
|
|
421
|
-
///
|
|
395
|
+
/// Multiple fields with mixed primitive/non-primitive types
|
|
422
396
|
#[persistent(u32)]
|
|
423
397
|
NamedVariant { first: u32, second: String, third: Address },
|
|
424
398
|
|
|
425
|
-
///
|
|
399
|
+
/// #[no_ttl_extension] opt-out for persistent storage
|
|
426
400
|
#[persistent(u64)]
|
|
427
401
|
#[no_ttl_extension]
|
|
428
402
|
CachedValue { key: Address },
|
|
429
403
|
}
|
|
430
404
|
};
|
|
431
405
|
|
|
432
|
-
let result = crate::storage::generate_storage(
|
|
406
|
+
let result = crate::storage::generate_storage(input);
|
|
433
407
|
let formatted = prettyplease::unparse(&syn::parse2::<syn::File>(result).expect("failed to parse generated code"));
|
|
434
408
|
|
|
435
409
|
insta::assert_snapshot!(formatted);
|
|
436
410
|
}
|
|
437
|
-
|
|
438
|
-
// ============================================
|
|
439
|
-
// is_primitive_type Unit Tests
|
|
440
|
-
// ============================================
|
|
441
|
-
|
|
442
|
-
#[test]
|
|
443
|
-
fn test_is_primitive_type_recognizes_primitive_types() {
|
|
444
|
-
let primitives = ["u32", "i32", "u64", "i64", "u128", "i128", "bool"];
|
|
445
|
-
for ty_str in primitives {
|
|
446
|
-
let ty = syn::parse_str::<syn::Type>(ty_str).expect("failed to parse type");
|
|
447
|
-
assert!(crate::storage::is_primitive_type(&ty), "{ty_str} should be recognized as primitive");
|
|
448
|
-
}
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
#[test]
|
|
452
|
-
fn test_is_primitive_type_rejects_non_primitive_types() {
|
|
453
|
-
let non_primitives = [
|
|
454
|
-
"u8", // not in primitive list
|
|
455
|
-
"usize", // not in primitive list
|
|
456
|
-
"String",
|
|
457
|
-
"Address",
|
|
458
|
-
"Vec<u8>",
|
|
459
|
-
"Option<u32>",
|
|
460
|
-
"std::u32", // multi-segment path
|
|
461
|
-
"soroban_sdk::Address",
|
|
462
|
-
];
|
|
463
|
-
|
|
464
|
-
for ty_str in non_primitives {
|
|
465
|
-
let ty = syn::parse_str::<syn::Type>(ty_str).expect("failed to parse type");
|
|
466
|
-
assert!(!crate::storage::is_primitive_type(&ty), "{ty_str} should NOT be recognized as primitive");
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
#[test]
|
|
471
|
-
fn test_is_primitive_type_rejects_other_type_variants() {
|
|
472
|
-
let other_variants = [
|
|
473
|
-
("&u32", "reference"),
|
|
474
|
-
("&mut u32", "mutable reference"),
|
|
475
|
-
("(u32, i32)", "tuple"),
|
|
476
|
-
("[u32; 4]", "array"),
|
|
477
|
-
("[u32]", "slice"),
|
|
478
|
-
("!", "never"),
|
|
479
|
-
];
|
|
480
|
-
|
|
481
|
-
for (ty_str, label) in other_variants {
|
|
482
|
-
let ty = syn::parse_str::<syn::Type>(ty_str).expect("failed to parse type");
|
|
483
|
-
assert!(!crate::storage::is_primitive_type(&ty), "{label} type {ty_str} should NOT be recognized as primitive");
|
|
484
|
-
}
|
|
485
|
-
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
//! Unit tests for the `is_primitive_type` function.
|
|
2
|
+
|
|
3
|
+
use crate::storage::test::is_primitive_type_for_test;
|
|
4
|
+
|
|
5
|
+
#[test]
|
|
6
|
+
fn test_recognizes_primitive_types() {
|
|
7
|
+
let primitives = ["u32", "i32", "u64", "i64", "u128", "i128", "bool"];
|
|
8
|
+
for ty_str in primitives {
|
|
9
|
+
let ty = syn::parse_str::<syn::Type>(ty_str).expect("failed to parse type");
|
|
10
|
+
assert!(is_primitive_type_for_test(&ty), "{ty_str} should be recognized as primitive");
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
#[test]
|
|
15
|
+
fn test_rejects_non_primitive_types() {
|
|
16
|
+
let non_primitives = [
|
|
17
|
+
"u8", // not in primitive list
|
|
18
|
+
"usize", // not in primitive list
|
|
19
|
+
"String",
|
|
20
|
+
"Address",
|
|
21
|
+
"Vec<u8>",
|
|
22
|
+
"Option<u32>",
|
|
23
|
+
"std::u32", // multi-segment path
|
|
24
|
+
"soroban_sdk::Address",
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
for ty_str in non_primitives {
|
|
28
|
+
let ty = syn::parse_str::<syn::Type>(ty_str).expect("failed to parse type");
|
|
29
|
+
assert!(!is_primitive_type_for_test(&ty), "{ty_str} should NOT be recognized as primitive");
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
#[test]
|
|
34
|
+
fn test_rejects_other_type_variants() {
|
|
35
|
+
let other_variants = [
|
|
36
|
+
("&u32", "reference"),
|
|
37
|
+
("&mut u32", "mutable reference"),
|
|
38
|
+
("(u32, i32)", "tuple"),
|
|
39
|
+
("[u32; 4]", "array"),
|
|
40
|
+
("[u32]", "slice"),
|
|
41
|
+
("!", "never"),
|
|
42
|
+
];
|
|
43
|
+
|
|
44
|
+
for (ty_str, label) in other_variants {
|
|
45
|
+
let ty = syn::parse_str::<syn::Type>(ty_str).expect("failed to parse type");
|
|
46
|
+
assert!(!is_primitive_type_for_test(&ty), "{label} type {ty_str} should NOT be recognized as primitive");
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
mod extract_fields;
|
|
2
|
+
mod gen_accessor_methods;
|
|
3
|
+
mod gen_args;
|
|
4
|
+
mod gen_enum_variant;
|
|
5
|
+
mod gen_key;
|
|
6
|
+
mod gen_params;
|
|
7
|
+
mod generate_storage;
|
|
8
|
+
mod is_primitive_type;
|
|
9
|
+
mod parse_default;
|
|
10
|
+
mod parse_name;
|
|
11
|
+
mod parse_no_ttl_extension;
|
|
12
|
+
mod parse_storage_type;
|
|
13
|
+
mod storage_kind;
|
|
14
|
+
mod test_setup;
|
|
15
|
+
mod validate_attrs;
|
|
16
|
+
mod variant_config;
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
//! Unit tests for the `parse_default` function.
|
|
2
|
+
|
|
3
|
+
use crate::storage::test::parse_default_for_test;
|
|
4
|
+
use quote::quote;
|
|
5
|
+
|
|
6
|
+
use super::test_setup::parse_attrs;
|
|
7
|
+
|
|
8
|
+
#[test]
|
|
9
|
+
fn test_no_default_returns_none() {
|
|
10
|
+
let attrs = parse_attrs(quote! {
|
|
11
|
+
enum Test {
|
|
12
|
+
#[persistent(u32)]
|
|
13
|
+
Variant,
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
let result = parse_default_for_test(&attrs);
|
|
18
|
+
assert!(result.is_ok());
|
|
19
|
+
assert!(result.unwrap().is_none());
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
#[test]
|
|
23
|
+
fn test_parses_integer_default() {
|
|
24
|
+
let attrs = parse_attrs(quote! {
|
|
25
|
+
enum Test {
|
|
26
|
+
#[persistent(u32)]
|
|
27
|
+
#[default(42)]
|
|
28
|
+
Variant,
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
let result = parse_default_for_test(&attrs);
|
|
33
|
+
assert!(result.is_ok());
|
|
34
|
+
let default = result.unwrap();
|
|
35
|
+
assert!(default.is_some());
|
|
36
|
+
assert_eq!(quote!(#default).to_string(), "42");
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
#[test]
|
|
40
|
+
fn test_parses_zero_default() {
|
|
41
|
+
let attrs = parse_attrs(quote! {
|
|
42
|
+
enum Test {
|
|
43
|
+
#[persistent(u32)]
|
|
44
|
+
#[default(0)]
|
|
45
|
+
Variant,
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
let result = parse_default_for_test(&attrs);
|
|
50
|
+
assert!(result.is_ok());
|
|
51
|
+
let default = result.unwrap();
|
|
52
|
+
assert!(default.is_some());
|
|
53
|
+
assert_eq!(quote!(#default).to_string(), "0");
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
#[test]
|
|
57
|
+
fn test_parses_boolean_default() {
|
|
58
|
+
let attrs = parse_attrs(quote! {
|
|
59
|
+
enum Test {
|
|
60
|
+
#[persistent(bool)]
|
|
61
|
+
#[default(true)]
|
|
62
|
+
Variant,
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
let result = parse_default_for_test(&attrs);
|
|
67
|
+
assert!(result.is_ok());
|
|
68
|
+
let default = result.unwrap();
|
|
69
|
+
assert!(default.is_some());
|
|
70
|
+
assert_eq!(quote!(#default).to_string(), "true");
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
#[test]
|
|
74
|
+
fn test_parses_method_call_default() {
|
|
75
|
+
let attrs = parse_attrs(quote! {
|
|
76
|
+
enum Test {
|
|
77
|
+
#[persistent(String)]
|
|
78
|
+
#[default(String::from_str(env, "hello"))]
|
|
79
|
+
Variant,
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
let result = parse_default_for_test(&attrs);
|
|
84
|
+
assert!(result.is_ok());
|
|
85
|
+
let default = result.unwrap();
|
|
86
|
+
assert!(default.is_some());
|
|
87
|
+
let default_str = quote!(#default).to_string();
|
|
88
|
+
assert!(default_str.contains("String :: from_str"));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
#[test]
|
|
92
|
+
fn test_error_multiple_defaults() {
|
|
93
|
+
let attrs = parse_attrs(quote! {
|
|
94
|
+
enum Test {
|
|
95
|
+
#[persistent(u32)]
|
|
96
|
+
#[default(0)]
|
|
97
|
+
#[default(1)]
|
|
98
|
+
Variant,
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
let result = parse_default_for_test(&attrs);
|
|
103
|
+
assert!(result.is_err());
|
|
104
|
+
let err = result.unwrap_err();
|
|
105
|
+
assert!(err.contains("multiple default values specified"));
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
#[test]
|
|
109
|
+
fn test_error_default_without_parens() {
|
|
110
|
+
let attrs = parse_attrs(quote! {
|
|
111
|
+
enum Test {
|
|
112
|
+
#[persistent(u32)]
|
|
113
|
+
#[default]
|
|
114
|
+
Variant,
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
let result = parse_default_for_test(&attrs);
|
|
119
|
+
assert!(result.is_err());
|
|
120
|
+
let err = result.unwrap_err();
|
|
121
|
+
assert!(err.contains("failed to parse default value"));
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
#[test]
|
|
125
|
+
fn test_error_default_empty_parens() {
|
|
126
|
+
let attrs = parse_attrs(quote! {
|
|
127
|
+
enum Test {
|
|
128
|
+
#[persistent(u32)]
|
|
129
|
+
#[default()]
|
|
130
|
+
Variant,
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
let result = parse_default_for_test(&attrs);
|
|
135
|
+
assert!(result.is_err());
|
|
136
|
+
let err = result.unwrap_err();
|
|
137
|
+
assert!(err.contains("failed to parse default value"));
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
#[test]
|
|
141
|
+
fn test_empty_attrs_returns_none() {
|
|
142
|
+
let attrs: Vec<syn::Attribute> = vec![];
|
|
143
|
+
|
|
144
|
+
let result = parse_default_for_test(&attrs);
|
|
145
|
+
assert!(result.is_ok());
|
|
146
|
+
assert!(result.unwrap().is_none());
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
#[test]
|
|
150
|
+
fn test_parses_negative_default() {
|
|
151
|
+
let attrs = parse_attrs(quote! {
|
|
152
|
+
enum Test {
|
|
153
|
+
#[persistent(i64)]
|
|
154
|
+
#[default(-100)]
|
|
155
|
+
Variant,
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
let result = parse_default_for_test(&attrs);
|
|
160
|
+
assert!(result.is_ok());
|
|
161
|
+
let default = result.unwrap();
|
|
162
|
+
assert!(default.is_some());
|
|
163
|
+
assert_eq!(quote!(#default).to_string(), "- 100");
|
|
164
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
//! Unit tests for the `parse_name` function.
|
|
2
|
+
|
|
3
|
+
use crate::storage::test::parse_name_for_test;
|
|
4
|
+
use quote::quote;
|
|
5
|
+
|
|
6
|
+
use super::test_setup::parse_attrs;
|
|
7
|
+
|
|
8
|
+
#[test]
|
|
9
|
+
fn test_no_name_returns_none() {
|
|
10
|
+
let attrs = parse_attrs(quote! {
|
|
11
|
+
enum Test {
|
|
12
|
+
#[persistent(u32)]
|
|
13
|
+
Variant,
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
let result = parse_name_for_test(&attrs);
|
|
18
|
+
assert!(result.is_ok());
|
|
19
|
+
assert!(result.unwrap().is_none());
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
#[test]
|
|
23
|
+
fn test_parses_custom_name() {
|
|
24
|
+
let attrs = parse_attrs(quote! {
|
|
25
|
+
enum Test {
|
|
26
|
+
#[persistent(u32)]
|
|
27
|
+
#[name("custom_name")]
|
|
28
|
+
Variant,
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
let result = parse_name_for_test(&attrs);
|
|
33
|
+
assert!(result.is_ok());
|
|
34
|
+
let name = result.unwrap();
|
|
35
|
+
assert_eq!(name, Some("custom_name".to_string()));
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
#[test]
|
|
39
|
+
fn test_parses_name_with_underscores() {
|
|
40
|
+
let attrs = parse_attrs(quote! {
|
|
41
|
+
enum Test {
|
|
42
|
+
#[persistent(u32)]
|
|
43
|
+
#[name("my_custom_storage_key")]
|
|
44
|
+
Variant,
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
let result = parse_name_for_test(&attrs);
|
|
49
|
+
assert!(result.is_ok());
|
|
50
|
+
let name = result.unwrap();
|
|
51
|
+
assert_eq!(name, Some("my_custom_storage_key".to_string()));
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
#[test]
|
|
55
|
+
fn test_error_multiple_names() {
|
|
56
|
+
let attrs = parse_attrs(quote! {
|
|
57
|
+
enum Test {
|
|
58
|
+
#[persistent(u32)]
|
|
59
|
+
#[name("first")]
|
|
60
|
+
#[name("second")]
|
|
61
|
+
Variant,
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
let result = parse_name_for_test(&attrs);
|
|
66
|
+
assert!(result.is_err());
|
|
67
|
+
let err = result.unwrap_err();
|
|
68
|
+
assert!(err.contains("multiple name attributes specified"));
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
#[test]
|
|
72
|
+
fn test_error_name_without_parens() {
|
|
73
|
+
let attrs = parse_attrs(quote! {
|
|
74
|
+
enum Test {
|
|
75
|
+
#[persistent(u32)]
|
|
76
|
+
#[name]
|
|
77
|
+
Variant,
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
let result = parse_name_for_test(&attrs);
|
|
82
|
+
assert!(result.is_err());
|
|
83
|
+
let err = result.unwrap_err();
|
|
84
|
+
assert!(err.contains("failed to parse name attribute"));
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
#[test]
|
|
88
|
+
fn test_error_name_empty_parens() {
|
|
89
|
+
let attrs = parse_attrs(quote! {
|
|
90
|
+
enum Test {
|
|
91
|
+
#[persistent(u32)]
|
|
92
|
+
#[name()]
|
|
93
|
+
Variant,
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
let result = parse_name_for_test(&attrs);
|
|
98
|
+
assert!(result.is_err());
|
|
99
|
+
let err = result.unwrap_err();
|
|
100
|
+
assert!(err.contains("failed to parse name attribute"));
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
#[test]
|
|
104
|
+
fn test_error_name_with_integer() {
|
|
105
|
+
let attrs = parse_attrs(quote! {
|
|
106
|
+
enum Test {
|
|
107
|
+
#[persistent(u32)]
|
|
108
|
+
#[name(123)]
|
|
109
|
+
Variant,
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
let result = parse_name_for_test(&attrs);
|
|
114
|
+
assert!(result.is_err());
|
|
115
|
+
let err = result.unwrap_err();
|
|
116
|
+
assert!(err.contains("failed to parse name attribute"));
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
#[test]
|
|
120
|
+
fn test_error_name_with_identifier() {
|
|
121
|
+
let attrs = parse_attrs(quote! {
|
|
122
|
+
enum Test {
|
|
123
|
+
#[persistent(u32)]
|
|
124
|
+
#[name(some_ident)]
|
|
125
|
+
Variant,
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
let result = parse_name_for_test(&attrs);
|
|
130
|
+
assert!(result.is_err());
|
|
131
|
+
let err = result.unwrap_err();
|
|
132
|
+
assert!(err.contains("failed to parse name attribute"));
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
#[test]
|
|
136
|
+
fn test_empty_attrs_returns_none() {
|
|
137
|
+
let attrs: Vec<syn::Attribute> = vec![];
|
|
138
|
+
|
|
139
|
+
let result = parse_name_for_test(&attrs);
|
|
140
|
+
assert!(result.is_ok());
|
|
141
|
+
assert!(result.unwrap().is_none());
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
#[test]
|
|
145
|
+
fn test_parses_name_with_special_chars() {
|
|
146
|
+
let attrs = parse_attrs(quote! {
|
|
147
|
+
enum Test {
|
|
148
|
+
#[persistent(u32)]
|
|
149
|
+
#[name("key_v2_beta")]
|
|
150
|
+
Variant,
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
let result = parse_name_for_test(&attrs);
|
|
155
|
+
assert!(result.is_ok());
|
|
156
|
+
let name = result.unwrap();
|
|
157
|
+
assert_eq!(name, Some("key_v2_beta".to_string()));
|
|
158
|
+
}
|
|
159
|
+
|