From 9606b437d7de7005bc9dd3f26d8abaf574a05bf5 Mon Sep 17 00:00:00 2001 From: mootz12 Date: Wed, 8 Apr 2026 21:29:49 -0400 Subject: [PATCH 1/3] fix: use spec shaking v1 if the env var is missing --- soroban-sdk-macros/src/derive_enum.rs | 11 ++++--- soroban-sdk-macros/src/derive_enum_int.rs | 8 ++--- .../src/derive_error_enum_int.rs | 8 ++--- soroban-sdk-macros/src/derive_event.rs | 10 +++---- soroban-sdk-macros/src/derive_struct.rs | 11 ++++--- soroban-sdk-macros/src/derive_struct_tuple.rs | 11 ++++--- soroban-sdk-macros/src/lib.rs | 22 +++++++++----- soroban-sdk/build.rs | 30 +++++++++---------- soroban-sdk/src/_features.rs | 15 ++++++---- soroban-sdk/src/into_val_for_contract_fn.rs | 4 +-- soroban-sdk/src/lib.rs | 8 ++--- .../src/try_from_val_for_contract_fn.rs | 4 +-- 12 files changed, 81 insertions(+), 61 deletions(-) diff --git a/soroban-sdk-macros/src/derive_enum.rs b/soroban-sdk-macros/src/derive_enum.rs index ad9e0e190..982ae2951 100644 --- a/soroban-sdk-macros/src/derive_enum.rs +++ b/soroban-sdk-macros/src/derive_enum.rs @@ -9,7 +9,10 @@ use stellar_xdr::{ ScSpecUdtUnionCaseVoidV0, ScSpecUdtUnionV0, StringM, VecM, WriteXdr, SCSYMBOL_LIMIT, }; -use crate::{doc::docs_from_attrs, map_type::map_type, shaking, DEFAULT_XDR_RW_LIMITS}; +use crate::{ + doc::docs_from_attrs, map_type::map_type, shaking, spec_shaking_v2_enabled, + DEFAULT_XDR_RW_LIMITS, +}; pub fn derive_type_enum( path: &Path, @@ -175,9 +178,9 @@ pub fn derive_type_enum( None }; - // SpecShakingMarker impl - only generated when spec is true and the - // experimental_spec_shaking_v2 feature is enabled. - let spec_shaking_impl = if cfg!(feature = "experimental_spec_shaking_v2") { + // SpecShakingMarker impl - only generated when spec is true and + // spec shaking v2 is enabled. + let spec_shaking_impl = if spec_shaking_v2_enabled() { spec_xdr.as_ref().map(|spec_xdr| { // Flatten all variant field types for shaking calls, deduplicating // to avoid redundant calls for types that appear in multiple variants. diff --git a/soroban-sdk-macros/src/derive_enum_int.rs b/soroban-sdk-macros/src/derive_enum_int.rs index 8d9f3df8f..add5be85a 100644 --- a/soroban-sdk-macros/src/derive_enum_int.rs +++ b/soroban-sdk-macros/src/derive_enum_int.rs @@ -7,7 +7,7 @@ use syn::{spanned::Spanned, Attribute, DataEnum, Error, ExprLit, Ident, Lit, Pat use stellar_xdr::{ScSpecEntry, ScSpecUdtEnumCaseV0, WriteXdr}; -use crate::{doc::docs_from_attrs, shaking, DEFAULT_XDR_RW_LIMITS}; +use crate::{doc::docs_from_attrs, shaking, spec_shaking_v2_enabled, DEFAULT_XDR_RW_LIMITS}; // TODO: Add conversions to/from ScVal types. @@ -97,9 +97,9 @@ pub fn derive_type_enum_int( None }; - // SpecShakingMarker impl - only generated when spec is true and the - // experimental_spec_shaking_v2 feature is enabled. - let spec_shaking_impl = if cfg!(feature = "experimental_spec_shaking_v2") { + // SpecShakingMarker impl - only generated when spec is true and + // spec shaking v2 is enabled. + let spec_shaking_impl = if spec_shaking_v2_enabled() { spec_xdr.as_ref().map(|spec_xdr| { shaking::generate_marker_impl( path, diff --git a/soroban-sdk-macros/src/derive_error_enum_int.rs b/soroban-sdk-macros/src/derive_error_enum_int.rs index d7b68aad8..f13c28edb 100644 --- a/soroban-sdk-macros/src/derive_error_enum_int.rs +++ b/soroban-sdk-macros/src/derive_error_enum_int.rs @@ -5,7 +5,7 @@ use stellar_xdr::curr as stellar_xdr; use stellar_xdr::{ScSpecEntry, ScSpecUdtErrorEnumCaseV0, ScSpecUdtErrorEnumV0, StringM, WriteXdr}; use syn::{spanned::Spanned, Attribute, DataEnum, Error, ExprLit, Ident, Lit, Path}; -use crate::{doc::docs_from_attrs, shaking, DEFAULT_XDR_RW_LIMITS}; +use crate::{doc::docs_from_attrs, shaking, spec_shaking_v2_enabled, DEFAULT_XDR_RW_LIMITS}; pub fn derive_type_error_enum_int( path: &Path, @@ -95,9 +95,9 @@ pub fn derive_type_error_enum_int( None }; - // SpecShakingMarker impl - only generated when spec is true and the - // experimental_spec_shaking_v2 feature is enabled. - let spec_shaking_impl = if cfg!(feature = "experimental_spec_shaking_v2") { + // SpecShakingMarker impl - only generated when spec is true and + // spec shaking v2 is enabled. + let spec_shaking_impl = if spec_shaking_v2_enabled() { spec_xdr.as_ref().map(|spec_xdr| { shaking::generate_marker_impl( path, diff --git a/soroban-sdk-macros/src/derive_event.rs b/soroban-sdk-macros/src/derive_event.rs index 0146fdabc..19ebf032f 100644 --- a/soroban-sdk-macros/src/derive_event.rs +++ b/soroban-sdk-macros/src/derive_event.rs @@ -1,6 +1,6 @@ use crate::{ attribute::remove_attributes_from_item, default_crate_path, doc::docs_from_attrs, - map_type::map_type, shaking, symbol, DEFAULT_XDR_RW_LIMITS, + map_type::map_type, shaking, spec_shaking_v2_enabled, symbol, DEFAULT_XDR_RW_LIMITS, }; use darling::{ast::NestedMeta, Error, FromMeta}; use heck::ToSnakeCase; @@ -197,7 +197,7 @@ fn derive_impls(args: &ContractEventArgs, input: &DeriveInput) -> Result::spec_shaking_marker(); }) } else { None @@ -215,9 +215,9 @@ fn derive_impls(args: &ContractEventArgs, input: &DeriveInput) -> Result Path { parse_str("soroban_sdk").unwrap() } +/// Returns true if spec shaking v2 should be used. Requires both the +/// `experimental_spec_shaking_v2` feature to be enabled on the macro crate AND +/// the `SOROBAN_SDK_BUILD_SYSTEM_SUPPORTS_SPEC_SHAKING_V2` env var to be set +/// at the time the macro expands (i.e. when the consumer crate is compiled). +fn spec_shaking_v2_enabled() -> bool { + cfg!(feature = "experimental_spec_shaking_v2") + && std::env::var("SOROBAN_SDK_BUILD_SYSTEM_SUPPORTS_SPEC_SHAKING_V2").is_ok() +} + #[derive(Debug, FromMeta)] struct ContractSpecArgs { name: Type, @@ -428,10 +437,10 @@ pub fn contracttype(metadata: TokenStream, input: TokenStream) -> TokenStream { } // If the export argument has a value, do as it instructs regarding // exporting. If it does not have a value, export if the type is pub, - // or always export when spec shaking is enabled. + // or always export when spec shaking v2 is enabled. let gen_spec = if let Some(export) = args.export { export - } else if cfg!(feature = "experimental_spec_shaking_v2") { + } else if spec_shaking_v2_enabled() { true } else { matches!(input.vis, Visibility::Public(_)) @@ -502,10 +511,10 @@ pub fn contracterror(metadata: TokenStream, input: TokenStream) -> TokenStream { let attrs = &input.attrs; // If the export argument has a value, do as it instructs regarding // exporting. If it does not have a value, export if the type is pub, - // or always export when spec shaking is enabled. + // or always export when spec shaking v2 is enabled. let gen_spec = if let Some(export) = args.export { export - } else if cfg!(feature = "experimental_spec_shaking_v2") { + } else if spec_shaking_v2_enabled() { true } else { matches!(input.vis, Visibility::Public(_)) @@ -691,10 +700,9 @@ pub fn contractimport(metadata: TokenStream) -> TokenStream { } }; - // Generate with options based on whether the experimental_spec_shaking_v2 - // feature is enabled. + // Generate with options based on whether spec shaking v2 is enabled let opts = GenerateOptions { - export: cfg!(feature = "experimental_spec_shaking_v2"), + export: spec_shaking_v2_enabled(), }; match generate_from_wasm_with_options(&wasm, &args.file, args.sha256.as_deref(), &opts) { Ok(code) => quote! { #code }, diff --git a/soroban-sdk/build.rs b/soroban-sdk/build.rs index 807801080..0fa91f946 100644 --- a/soroban-sdk/build.rs +++ b/soroban-sdk/build.rs @@ -21,25 +21,23 @@ pub fn main() { } // When the experimental_spec_shaking_v2 feature is enabled, check for an env var from the - // build system (Stellar CLI) that indicates it supports spec optimization using markers. + // build system (like Stellar CLI) that indicates it supports spec optimization using markers. + // If the env var is set, enable spec_shaking_v2 cfg for the crate. If not, fall back to + // spec shaking v1 behavior and emit a warning on wasm targets. + println!("cargo::rustc-check-cfg=cfg(spec_shaking_v2)"); if std::env::var("CARGO_FEATURE_EXPERIMENTAL_SPEC_SHAKING_V2").is_ok() { let env_name = "SOROBAN_SDK_BUILD_SYSTEM_SUPPORTS_SPEC_SHAKING_V2"; println!("cargo::rerun-if-env-changed={env_name}"); - if std::env::var(env_name).is_err() - && std::env::var("CARGO_CFG_TARGET_FAMILY").unwrap_or_default() == "wasm" - { - panic!( - "\ -\n\nerror: soroban-sdk feature 'experimental_spec_shaking_v2' requires stellar-cli v25.2.0+\ -\n\ -\nThe soroban-sdk 'experimental_spec_shaking_v2' feature requires building\ -\nwith `stellar contract build` from stellar-cli v25.2.0 or newer.\ -\n\ -\nTo fix, either:\ -\n - Build with `stellar contract build` using stellar-cli v25.2.0+\ -\n - Disable the feature by removing 'experimental_spec_shaking_v2' from\ -\n the soroban-sdk import features list in Cargo.toml.\ -\n" + if std::env::var(env_name).is_ok() { + println!("cargo::rustc-cfg=spec_shaking_v2"); + } else if std::env::var("CARGO_CFG_TARGET_FAMILY").unwrap_or_default() == "wasm" { + println!( + "cargo::warning=soroban-sdk: feature 'experimental_spec_shaking_v2' was enabled but not used, \ + because this build was not started by a tool that supports spec shaking v2. \ + Falling back to spec shaking v1. To use v2, use a build tool that supports \ + spec shaking v2 such as stellar-cli v25.2.0+ with `stellar contract build`. \ + To manually use v2 without a supporting build tool, set the env var \ + SOROBAN_SDK_BUILD_SYSTEM_SUPPORTS_SPEC_SHAKING_V2 before building." ); } } diff --git a/soroban-sdk/src/_features.rs b/soroban-sdk/src/_features.rs index ba004ff71..79c8f2faa 100644 --- a/soroban-sdk/src/_features.rs +++ b/soroban-sdk/src/_features.rs @@ -135,11 +135,16 @@ //! //! ### Build Requirements //! -//! This feature requires building with `stellar contract build` from -//! `stellar-cli` v25.2.0 or newer. Building directly with `cargo build` will -//! produce a build error unless the -//! `SOROBAN_SDK_BUILD_SYSTEM_SUPPORTS_SPEC_SHAKING_V2` environment variable is -//! set. +//! Spec shaking v2 requires the +//! `SOROBAN_SDK_BUILD_SYSTEM_SUPPORTS_SPEC_SHAKING_V2` environment variable to +//! be set at build time. This is automatically set by `stellar contract build` +//! from `stellar-cli` v25.2.0 or newer. +//! +//! When the `experimental_spec_shaking_v2` feature is enabled but the env var +//! is not set, the SDK falls back to spec shaking v1 behavior and emits a +//! compiler warning on wasm targets. This allows contracts to build with plain +//! `cargo build` without errors, while still benefiting from v2 when built +//! with compatible tooling. //! //! [`contracttype`]: crate::contracttype //! [`contracterror`]: crate::contracterror diff --git a/soroban-sdk/src/into_val_for_contract_fn.rs b/soroban-sdk/src/into_val_for_contract_fn.rs index a875902f9..1aec801f4 100644 --- a/soroban-sdk/src/into_val_for_contract_fn.rs +++ b/soroban-sdk/src/into_val_for_contract_fn.rs @@ -20,7 +20,7 @@ pub trait IntoValForContractFn { fn into_val_for_contract_fn(self, env: &Env) -> Val; } -#[cfg(feature = "experimental_spec_shaking_v2")] +#[cfg(spec_shaking_v2)] #[doc(hidden)] #[allow(deprecated)] impl IntoValForContractFn for T @@ -33,7 +33,7 @@ where } } -#[cfg(not(feature = "experimental_spec_shaking_v2"))] +#[cfg(not(spec_shaking_v2))] #[doc(hidden)] #[allow(deprecated)] impl IntoValForContractFn for T diff --git a/soroban-sdk/src/lib.rs b/soroban-sdk/src/lib.rs index c4fa3530b..15c3cec9c 100644 --- a/soroban-sdk/src/lib.rs +++ b/soroban-sdk/src/lib.rs @@ -118,11 +118,11 @@ const _: () = { val = concat!(env!("CARGO_PKG_VERSION"), "#", env!("GIT_REVISION")), ); - // An indicator of the spec shaking version in use. Signals to the stellar-cli that the .wasm + // An indicator of the spec shaking version in use. Signals to the post-build system that the .wasm // needs to have its spec shaken. See soroban_spec::shaking for constants and version detection. // The contractmeta! macro requires string literals, so we assert the literals match the // constants defined in soroban_spec::shaking. - #[cfg(feature = "experimental_spec_shaking_v2")] + #[cfg(spec_shaking_v2)] contractmeta!(key = "rssdk_spec_shaking", val = "2"); }; @@ -1195,9 +1195,9 @@ mod into_val_for_contract_fn; #[allow(deprecated)] pub use into_val_for_contract_fn::IntoValForContractFn; -#[cfg(feature = "experimental_spec_shaking_v2")] +#[cfg(spec_shaking_v2)] mod spec_shaking; -#[cfg(feature = "experimental_spec_shaking_v2")] +#[cfg(spec_shaking_v2)] #[doc(hidden)] pub use spec_shaking::SpecShakingMarker; diff --git a/soroban-sdk/src/try_from_val_for_contract_fn.rs b/soroban-sdk/src/try_from_val_for_contract_fn.rs index 51f94d955..af8fc967a 100644 --- a/soroban-sdk/src/try_from_val_for_contract_fn.rs +++ b/soroban-sdk/src/try_from_val_for_contract_fn.rs @@ -30,7 +30,7 @@ pub trait TryFromValForContractFn: Sized { fn try_from_val_for_contract_fn(env: &E, v: &V) -> Result; } -#[cfg(feature = "experimental_spec_shaking_v2")] +#[cfg(spec_shaking_v2)] #[doc(hidden)] #[allow(deprecated)] impl TryFromValForContractFn for U @@ -44,7 +44,7 @@ where } } -#[cfg(not(feature = "experimental_spec_shaking_v2"))] +#[cfg(not(spec_shaking_v2))] #[doc(hidden)] #[allow(deprecated)] impl TryFromValForContractFn for U From 31a3f2b5cc20df68d2645dff9a0bfc7a83d2b9bc Mon Sep 17 00:00:00 2001 From: mootz12 Date: Wed, 8 Apr 2026 21:30:19 -0400 Subject: [PATCH 2/3] test: update tests and add spec shaking v2 enabled and env var missing test --- Makefile | 16 +- tests-expanded/test_account_tests.rs | 5 - tests-expanded/test_auth_tests.rs | 10 - tests-expanded/test_bls_tests.rs | 11 - tests-expanded/test_bn254_tests.rs | 8 - tests-expanded/test_constructor_tests.rs | 7 - .../test_contracttrait_trait_tests.rs | 21 - tests-expanded/test_errors_tests.rs | 10 - tests-expanded/test_events_ref_tests.rs | 11 - tests-expanded/test_events_tests.rs | 11 - tests-expanded/test_spec_lib_tests.rs | 127 ---- tests-expanded/test_spec_shaking_v1_tests.rs | 501 ------------- tests-expanded/test_spec_shaking_v2_tests.rs | 679 +++++------------- tests-expanded/test_udt_tests.rs | 31 - tests-expanded/test_workspace_lib_tests.rs | 7 - tests/spec_shaking_v2/src/test.rs | 148 ++++ 16 files changed, 337 insertions(+), 1266 deletions(-) diff --git a/Makefile b/Makefile index 55a881025..8395b3c9a 100644 --- a/Makefile +++ b/Makefile @@ -30,9 +30,21 @@ build: build-libs build-test-wasms build-libs: fmt cargo hack build --release $(foreach c,$(LIB_CRATES),--package $(c)) +# First, build crate used as WASM deps to other test crates. +# Then, build `test_spec_shaking_v2` without the spec shaking v2 env var to verify +# that it falls back to spec_shaking_v1 behaviour. +# Then, build the test wasms with MSRV by default, with some meta disabled for +# binary stability for tests. build-test-wasms: fmt - # Build the test wasms with MSRV by default, with some meta disabled for - # binary stability for tests. + SOROBAN_SDK_BUILD_SYSTEM_SUPPORTS_SPEC_SHAKING_V2=1 \ + RUSTUP_TOOLCHAIN=$(TEST_CRATES_RUSTUP_TOOLCHAIN) \ + RUSTFLAGS='--cfg soroban_sdk_internal_no_rssdkver_meta' \ + cargo build --release --target wasm32v1-none --package test_spec_import + RUSTUP_TOOLCHAIN=$(TEST_CRATES_RUSTUP_TOOLCHAIN) \ + RUSTFLAGS='--cfg soroban_sdk_internal_no_rssdkver_meta' \ + cargo build --release --target wasm32v1-none --package test_spec_shaking_v2 + cp target/wasm32v1-none/release/test_spec_shaking_v2.wasm \ + target/wasm32v1-none/release/test_spec_shaking_v2_no_env.wasm SOROBAN_SDK_BUILD_SYSTEM_SUPPORTS_SPEC_SHAKING_V2=1 \ RUSTUP_TOOLCHAIN=$(TEST_CRATES_RUSTUP_TOOLCHAIN) \ RUSTFLAGS='--cfg soroban_sdk_internal_no_rssdkver_meta' \ diff --git a/tests-expanded/test_account_tests.rs b/tests-expanded/test_account_tests.rs index e1a15ed18..a8c5648f7 100644 --- a/tests-expanded/test_account_tests.rs +++ b/tests-expanded/test_account_tests.rs @@ -56,11 +56,6 @@ impl Error { *b"\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\x05Error\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\x04Fail\0\0\0\x01" } } -impl soroban_sdk::SpecShakingMarker for Error { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl TryFrom for Error { type Error = soroban_sdk::Error; #[inline(always)] diff --git a/tests-expanded/test_auth_tests.rs b/tests-expanded/test_auth_tests.rs index 075ea8b10..758948468 100644 --- a/tests-expanded/test_auth_tests.rs +++ b/tests-expanded/test_auth_tests.rs @@ -1124,11 +1124,6 @@ mod test_a { *b"\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\x05Error\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\x07Decline\0\0\0\0\x01" } } - impl soroban_sdk::SpecShakingMarker for Error { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} - } impl TryFrom for Error { type Error = soroban_sdk::Error; #[inline(always)] @@ -2606,11 +2601,6 @@ mod test_b { *b"\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\x05Error\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\x07Decline\0\0\0\0\x01" } } - impl soroban_sdk::SpecShakingMarker for Error { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} - } impl TryFrom for Error { type Error = soroban_sdk::Error; #[inline(always)] diff --git a/tests-expanded/test_bls_tests.rs b/tests-expanded/test_bls_tests.rs index 665c3958b..f6f51b1cd 100644 --- a/tests-expanded/test_bls_tests.rs +++ b/tests-expanded/test_bls_tests.rs @@ -22,17 +22,6 @@ impl DummyProof { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\nDummyProof\0\0\0\0\0\x05\0\0\0\0\0\0\0\x02fp\0\0\0\0\x03\xee\0\0\00\0\0\0\0\0\0\0\x03fp2\0\0\0\x03\xee\0\0\0`\0\0\0\0\0\0\0\x02fr\0\0\0\0\0\x0c\0\0\0\0\0\0\0\x02g1\0\0\0\0\x03\xee\0\0\0`\0\0\0\0\0\0\0\x02g2\0\0\0\0\x03\xee\0\0\0\xc0" } } -impl soroban_sdk::SpecShakingMarker for DummyProof { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - ::spec_shaking_marker(); - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for DummyProof { type Error = soroban_sdk::ConversionError; fn try_from_val( diff --git a/tests-expanded/test_bn254_tests.rs b/tests-expanded/test_bn254_tests.rs index e74199189..21d87d2c8 100644 --- a/tests-expanded/test_bn254_tests.rs +++ b/tests-expanded/test_bn254_tests.rs @@ -19,14 +19,6 @@ impl MockProof { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\tMockProof\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x02g1\0\0\0\0\x03\xea\0\0\x03\xee\0\0\0@\0\0\0\0\0\0\0\x02g2\0\0\0\0\x03\xea\0\0\x03\xee\0\0\0\x80" } } -impl soroban_sdk::SpecShakingMarker for MockProof { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - as soroban_sdk::SpecShakingMarker>::spec_shaking_marker(); - as soroban_sdk::SpecShakingMarker>::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for MockProof { type Error = soroban_sdk::ConversionError; fn try_from_val( diff --git a/tests-expanded/test_constructor_tests.rs b/tests-expanded/test_constructor_tests.rs index 2ddc1d91a..b28498638 100644 --- a/tests-expanded/test_constructor_tests.rs +++ b/tests-expanded/test_constructor_tests.rs @@ -147,13 +147,6 @@ impl DataKey { *b"\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\x07DataKey\0\0\0\0\x03\0\0\0\x01\0\0\0\0\0\0\0\nPersistent\0\0\0\0\0\x01\0\0\0\x04\0\0\0\x01\0\0\0\0\0\0\0\x04Temp\0\0\0\x01\0\0\0\x04\0\0\0\x01\0\0\0\0\0\0\0\x08Instance\0\0\0\x01\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for DataKey { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for DataKey { type Error = soroban_sdk::ConversionError; #[inline(always)] diff --git a/tests-expanded/test_contracttrait_trait_tests.rs b/tests-expanded/test_contracttrait_trait_tests.rs index 9b6611d36..26964756b 100644 --- a/tests-expanded/test_contracttrait_trait_tests.rs +++ b/tests-expanded/test_contracttrait_trait_tests.rs @@ -55,14 +55,6 @@ impl MyStruct { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x08MyStruct\0\0\0\x02\0\0\0\0\0\0\0\x01a\0\0\0\0\0\0\x07\0\0\0\0\0\0\0\x01b\0\0\0\0\0\0\x07" } } -impl soroban_sdk::SpecShakingMarker for MyStruct { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for MyStruct { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -473,11 +465,6 @@ impl MyEnumUnit { *b"\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\nMyEnumUnit\0\0\0\0\0\x02\0\0\0\0\0\0\0\x01A\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\x01B\0\0\0\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for MyEnumUnit { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl soroban_sdk::TryFromVal for MyEnumUnit { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -823,14 +810,6 @@ impl MyEnumVariants { *b"\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\x0eMyEnumVariants\0\0\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x04VarA\0\0\0\x01\0\0\0\0\0\0\0\x04VarB\0\0\0\x01\0\0\x07\xd0\0\0\0\x08MyStruct\0\0\0\x01\0\0\0\0\0\0\0\x04VarC\0\0\0\x01\0\0\x07\xd0\0\0\0\nMyEnumUnit\0\0" } } -impl soroban_sdk::SpecShakingMarker for MyEnumVariants { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for MyEnumVariants { type Error = soroban_sdk::ConversionError; #[inline(always)] diff --git a/tests-expanded/test_errors_tests.rs b/tests-expanded/test_errors_tests.rs index 500770f1c..6cd9ae243 100644 --- a/tests-expanded/test_errors_tests.rs +++ b/tests-expanded/test_errors_tests.rs @@ -163,11 +163,6 @@ impl Flag { *b"\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x04Flag\0\0\0\x05\0\0\0\0\0\0\0\x01A\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01B\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\x01C\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x01D\0\0\0\0\0\0\x03\0\0\0\0\0\0\0\x01E\0\0\0\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for Flag { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl soroban_sdk::TryFromVal for Flag { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -510,11 +505,6 @@ impl Error { *b"\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\x05Error\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\x07AnError\0\0\0\0\x01" } } -impl soroban_sdk::SpecShakingMarker for Error { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl TryFrom for Error { type Error = soroban_sdk::Error; #[inline(always)] diff --git a/tests-expanded/test_events_ref_tests.rs b/tests-expanded/test_events_ref_tests.rs index 720ec4006..aaeaf7f99 100644 --- a/tests-expanded/test_events_ref_tests.rs +++ b/tests-expanded/test_events_ref_tests.rs @@ -148,16 +148,6 @@ impl<'a> Transfer<'a> { *b"\0\0\0\x05\0\0\0\0\0\0\0\0\0\0\0\x08Transfer\0\0\0\x01\0\0\0\x08transfer\0\0\0\x04\0\0\0\0\0\0\0\x04from\0\0\0\x13\0\0\0\x01\0\0\0\0\0\0\0\x02to\0\0\0\0\0\x13\0\0\0\x01\0\0\0\0\0\0\0\x06amount\0\0\0\0\0\x0b\0\0\0\0\0\0\0\0\0\0\0\x0bto_muxed_id\0\0\0\x03\xe8\0\0\0\x06\0\0\0\0\0\0\0\x02" } } -impl<'a> soroban_sdk::SpecShakingMarker for Transfer<'a> { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - <&'a Address as soroban_sdk::SpecShakingMarker>::spec_shaking_marker(); - <&'a Address as soroban_sdk::SpecShakingMarker>::spec_shaking_marker(); - <&'a i128 as soroban_sdk::SpecShakingMarker>::spec_shaking_marker(); - as soroban_sdk::SpecShakingMarker>::spec_shaking_marker(); - } -} impl<'a> soroban_sdk::Event for Transfer<'a> { fn topics(&self, env: &soroban_sdk::Env) -> soroban_sdk::Vec { use soroban_sdk::IntoVal; @@ -190,7 +180,6 @@ impl<'a> soroban_sdk::Event for Transfer<'a> { } impl<'a> Transfer<'a> { pub fn publish(&self, env: &soroban_sdk::Env) { - ::spec_shaking_marker(); <_ as soroban_sdk::Event>::publish(self, env); } } diff --git a/tests-expanded/test_events_tests.rs b/tests-expanded/test_events_tests.rs index f95a79436..3168c4e71 100644 --- a/tests-expanded/test_events_tests.rs +++ b/tests-expanded/test_events_tests.rs @@ -148,16 +148,6 @@ impl Transfer { *b"\0\0\0\x05\0\0\0\0\0\0\0\0\0\0\0\x08Transfer\0\0\0\x01\0\0\0\x08transfer\0\0\0\x04\0\0\0\0\0\0\0\x04from\0\0\0\x13\0\0\0\x01\0\0\0\0\0\0\0\x02to\0\0\0\0\0\x13\0\0\0\x01\0\0\0\0\0\0\0\x06amount\0\0\0\0\0\x0b\0\0\0\0\0\0\0\0\0\0\0\x0bto_muxed_id\0\0\0\x03\xe8\0\0\0\x06\0\0\0\0\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for Transfer { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { -
::spec_shaking_marker(); -
::spec_shaking_marker(); - ::spec_shaking_marker(); - as soroban_sdk::SpecShakingMarker>::spec_shaking_marker(); - } -} impl soroban_sdk::Event for Transfer { fn topics(&self, env: &soroban_sdk::Env) -> soroban_sdk::Vec { use soroban_sdk::IntoVal; @@ -190,7 +180,6 @@ impl soroban_sdk::Event for Transfer { } impl Transfer { pub fn publish(&self, env: &soroban_sdk::Env) { - ::spec_shaking_marker(); <_ as soroban_sdk::Event>::publish(self, env); } } diff --git a/tests-expanded/test_spec_lib_tests.rs b/tests-expanded/test_spec_lib_tests.rs index ed1ffec40..83a39631a 100644 --- a/tests-expanded/test_spec_lib_tests.rs +++ b/tests-expanded/test_spec_lib_tests.rs @@ -53,14 +53,6 @@ impl StructA { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x07StructA\0\0\0\0\x02\0\0\0\0\0\0\0\x02f1\0\0\0\0\0\x04\0\0\0\0\0\0\0\x02f2\0\0\0\0\0\x01" } } -impl soroban_sdk::SpecShakingMarker for StructA { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for StructA { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -469,14 +461,6 @@ impl StructB { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x07StructB\0\0\0\0\x02\0\0\0\0\0\0\0\x02f1\0\0\0\0\0\x07\0\0\0\0\0\0\0\x02f2\0\0\0\0\0\x10" } } -impl soroban_sdk::SpecShakingMarker for StructB { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for StructB { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -885,14 +869,6 @@ impl StructC { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x07StructC\0\0\0\0\x02\0\0\0\0\0\0\0\x02f1\0\0\0\0\x03\xea\0\0\0\x04\0\0\0\0\0\0\0\x02f2\0\0\0\0\0\x13" } } -impl soroban_sdk::SpecShakingMarker for StructC { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - as soroban_sdk::SpecShakingMarker>::spec_shaking_marker(); -
::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for StructC { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -1297,14 +1273,6 @@ impl StructTupleA { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x0cStructTupleA\0\0\0\x02\0\0\0\0\0\0\0\x010\0\0\0\0\0\0\x07\0\0\0\0\0\0\0\x011\0\0\0\0\0\0\x07" } } -impl soroban_sdk::SpecShakingMarker for StructTupleA { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for StructTupleA { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -1673,14 +1641,6 @@ impl StructTupleB { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x0cStructTupleB\0\0\0\x02\0\0\0\0\0\0\0\x010\0\0\0\0\0\0\n\0\0\0\0\0\0\0\x011\0\0\0\0\0\0\n" } } -impl soroban_sdk::SpecShakingMarker for StructTupleB { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for StructTupleB { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -2050,14 +2010,6 @@ impl StructTupleC { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x0cStructTupleC\0\0\0\x02\0\0\0\0\0\0\0\x010\0\0\0\0\0\0\x13\0\0\0\0\0\0\0\x011\0\0\0\0\0\0\x0b" } } -impl soroban_sdk::SpecShakingMarker for StructTupleC { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { -
::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for StructTupleC { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -2438,11 +2390,6 @@ impl EnumA { *b"\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\x05EnumA\0\0\0\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x02V1\0\0\0\0\0\0\0\0\0\0\0\0\0\x02V2\0\0\0\0\0\0\0\0\0\0\0\0\0\x02V3\0\0" } } -impl soroban_sdk::SpecShakingMarker for EnumA { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl soroban_sdk::TryFromVal for EnumA { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -2908,13 +2855,6 @@ impl EnumB { *b"\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\x05EnumB\0\0\0\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x02V1\0\0\0\0\0\x01\0\0\0\0\0\0\0\x02V2\0\0\0\0\0\x01\0\0\0\x07\0\0\0\x01\0\0\0\0\0\0\0\x02V3\0\0\0\0\0\x02\0\0\0\x07\0\0\0\x07" } } -impl soroban_sdk::SpecShakingMarker for EnumB { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for EnumB { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -3502,14 +3442,6 @@ impl EnumC { *b"\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\x05EnumC\0\0\0\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x02V1\0\0\0\0\0\x01\0\0\0\0\0\0\0\x02V2\0\0\0\0\0\x01\0\0\x07\xd0\0\0\0\x07StructA\0\0\0\0\x01\0\0\0\0\0\0\0\x02V3\0\0\0\0\0\x01\0\0\x07\xd0\0\0\0\x0cStructTupleA" } } -impl soroban_sdk::SpecShakingMarker for EnumC { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for EnumC { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -4048,11 +3980,6 @@ impl EnumIntA { *b"\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x08EnumIntA\0\0\0\x03\0\0\0\0\0\0\0\x02V1\0\0\0\0\0\x01\0\0\0\0\0\0\0\x02V2\0\0\0\0\0\x02\0\0\0\0\0\0\0\x02V3\0\0\0\0\0\x03" } } -impl soroban_sdk::SpecShakingMarker for EnumIntA { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl soroban_sdk::TryFromVal for EnumIntA { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -4391,11 +4318,6 @@ impl EnumIntB { *b"\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x08EnumIntB\0\0\0\x03\0\0\0\0\0\0\0\x02V1\0\0\0\0\0\n\0\0\0\0\0\0\0\x02V2\0\0\0\0\0\x14\0\0\0\0\0\0\0\x02V3\0\0\0\0\0\x1e" } } -impl soroban_sdk::SpecShakingMarker for EnumIntB { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl soroban_sdk::TryFromVal for EnumIntB { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -4734,11 +4656,6 @@ impl EnumIntC { *b"\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x08EnumIntC\0\0\0\x03\0\0\0\0\0\0\0\x02V1\0\0\0\0\0d\0\0\0\0\0\0\0\x02V2\0\0\0\0\0\xc8\0\0\0\0\0\0\0\x02V3\0\0\0\0\x01," } } -impl soroban_sdk::SpecShakingMarker for EnumIntC { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl soroban_sdk::TryFromVal for EnumIntC { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -5077,11 +4994,6 @@ impl ErrorA { *b"\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\x06ErrorA\0\0\0\0\0\x03\0\0\0\0\0\0\0\x02E1\0\0\0\0\0\x01\0\0\0\0\0\0\0\x02E2\0\0\0\0\0\x02\0\0\0\0\0\0\0\x02E3\0\0\0\0\0\x03" } } -impl soroban_sdk::SpecShakingMarker for ErrorA { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl TryFrom for ErrorA { type Error = soroban_sdk::Error; #[inline(always)] @@ -5245,11 +5157,6 @@ impl ErrorB { *b"\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\x06ErrorB\0\0\0\0\0\x03\0\0\0\0\0\0\0\x02E1\0\0\0\0\0\n\0\0\0\0\0\0\0\x02E2\0\0\0\0\0\x0b\0\0\0\0\0\0\0\x02E3\0\0\0\0\0\x0c" } } -impl soroban_sdk::SpecShakingMarker for ErrorB { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl TryFrom for ErrorB { type Error = soroban_sdk::Error; #[inline(always)] @@ -5413,11 +5320,6 @@ impl ErrorC { *b"\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\x06ErrorC\0\0\0\0\0\x03\0\0\0\0\0\0\0\x02E1\0\0\0\0\0d\0\0\0\0\0\0\0\x02E2\0\0\0\0\0e\0\0\0\0\0\0\0\x02E3\0\0\0\0\0f" } } -impl soroban_sdk::SpecShakingMarker for ErrorC { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl TryFrom for ErrorC { type Error = soroban_sdk::Error; #[inline(always)] @@ -5577,14 +5479,6 @@ impl EventA { *b"\0\0\0\x05\0\0\0\0\0\0\0\0\0\0\0\x06EventA\0\0\0\0\0\x01\0\0\0\x07event_a\0\0\0\0\x02\0\0\0\0\0\0\0\x02f1\0\0\0\0\0\x13\0\0\0\x01\0\0\0\0\0\0\0\x02f2\0\0\0\0\0\x10\0\0\0\0\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for EventA { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { -
::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::Event for EventA { fn topics(&self, env: &soroban_sdk::Env) -> soroban_sdk::Vec { use soroban_sdk::IntoVal; @@ -5612,7 +5506,6 @@ impl soroban_sdk::Event for EventA { } impl EventA { pub fn publish(&self, env: &soroban_sdk::Env) { - ::spec_shaking_marker(); <_ as soroban_sdk::Event>::publish(self, env); } } @@ -5666,15 +5559,6 @@ impl EventB { *b"\0\0\0\x05\0\0\0\0\0\0\0\0\0\0\0\x06EventB\0\0\0\0\0\x01\0\0\0\x07event_b\0\0\0\0\x03\0\0\0\0\0\0\0\x02f1\0\0\0\0\0\x13\0\0\0\x01\0\0\0\0\0\0\0\x02f2\0\0\0\0\0\x13\0\0\0\x01\0\0\0\0\0\0\0\x02f3\0\0\0\0\0\x0b\0\0\0\0\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for EventB { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { -
::spec_shaking_marker(); -
::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::Event for EventB { fn topics(&self, env: &soroban_sdk::Env) -> soroban_sdk::Vec { use soroban_sdk::IntoVal; @@ -5706,7 +5590,6 @@ impl soroban_sdk::Event for EventB { } impl EventB { pub fn publish(&self, env: &soroban_sdk::Env) { - ::spec_shaking_marker(); <_ as soroban_sdk::Event>::publish(self, env); } } @@ -5760,15 +5643,6 @@ impl EventC { *b"\0\0\0\x05\0\0\0\0\0\0\0\0\0\0\0\x06EventC\0\0\0\0\0\x01\0\0\0\x07event_c\0\0\0\0\x03\0\0\0\0\0\0\0\x02f1\0\0\0\0\0\x11\0\0\0\x01\0\0\0\0\0\0\0\x02f2\0\0\0\0\0\x07\0\0\0\0\0\0\0\0\0\0\0\x02f3\0\0\0\0\0\x07\0\0\0\0\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for EventC { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::Event for EventC { fn topics(&self, env: &soroban_sdk::Env) -> soroban_sdk::Vec { use soroban_sdk::IntoVal; @@ -5796,7 +5670,6 @@ impl soroban_sdk::Event for EventC { } impl EventC { pub fn publish(&self, env: &soroban_sdk::Env) { - ::spec_shaking_marker(); <_ as soroban_sdk::Event>::publish(self, env); } } diff --git a/tests-expanded/test_spec_shaking_v1_tests.rs b/tests-expanded/test_spec_shaking_v1_tests.rs index 18edb93ba..5b2efa1b1 100644 --- a/tests-expanded/test_spec_shaking_v1_tests.rs +++ b/tests-expanded/test_spec_shaking_v1_tests.rs @@ -191,14 +191,6 @@ impl UsedParamStruct { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x0fUsedParamStruct\0\0\0\0\x02\0\0\0\0\0\0\0\x01a\0\0\0\0\0\0\x04\0\0\0\0\0\0\0\x06nested\0\0\0\0\x07\xd0\0\0\0\x12UsedNestedInStruct\0\0" } } -impl soroban_sdk::SpecShakingMarker for UsedParamStruct { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedParamStruct { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -626,14 +618,6 @@ impl UsedReturnEnum { *b"\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\x0eUsedReturnEnum\0\0\0\0\0\x02\0\0\0\x01\0\0\0\0\0\0\0\x01A\0\0\0\0\0\0\x01\0\0\0\x04\0\0\0\x01\0\0\0\0\0\0\0\x01B\0\0\0\0\0\0\x01\0\0\0\x07" } } -impl soroban_sdk::SpecShakingMarker for UsedReturnEnum { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedReturnEnum { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -1142,11 +1126,6 @@ impl UsedParamIntEnum { *b"\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x10UsedParamIntEnum\0\0\0\x02\0\0\0\0\0\0\0\x01X\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\x01Y\0\0\0\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for UsedParamIntEnum { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl soroban_sdk::TryFromVal for UsedParamIntEnum { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -1473,11 +1452,6 @@ impl UsedErrorEnum { *b"\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\rUsedErrorEnum\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x08NotFound\0\0\0\x01\0\0\0\0\0\0\0\x07Invalid\0\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for UsedErrorEnum { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl TryFrom for UsedErrorEnum { type Error = soroban_sdk::Error; #[inline(always)] @@ -1633,13 +1607,6 @@ impl UsedNestedInStruct { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x12UsedNestedInStruct\0\0\0\0\0\x01\0\0\0\0\0\0\0\x03val\0\0\0\0\x07" } } -impl soroban_sdk::SpecShakingMarker for UsedNestedInStruct { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedNestedInStruct { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -1997,13 +1964,6 @@ impl UsedVecElement { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x0eUsedVecElement\0\0\0\0\0\x01\0\0\0\0\0\0\0\x04data\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for UsedVecElement { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedVecElement { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -2366,11 +2326,6 @@ impl UsedMapKey { *b"\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\nUsedMapKey\0\0\0\0\0\x02\0\0\0\0\0\0\0\x02K1\0\0\0\0\0\x01\0\0\0\0\0\0\0\x02K2\0\0\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for UsedMapKey { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl soroban_sdk::TryFromVal for UsedMapKey { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -2688,13 +2643,6 @@ impl UsedMapVal { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\nUsedMapVal\0\0\0\0\0\x01\0\0\0\0\0\0\0\x01v\0\0\0\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for UsedMapVal { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedMapVal { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -3051,13 +2999,6 @@ impl UsedOptionElement { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x11UsedOptionElement\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\x04data\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for UsedOptionElement { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedOptionElement { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -3413,13 +3354,6 @@ impl UsedResultOk { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x0cUsedResultOk\0\0\0\x01\0\0\0\0\0\0\0\x04data\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for UsedResultOk { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedResultOk { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -3783,14 +3717,6 @@ impl UsedEventSimple { *b"\0\0\0\x05\0\0\0\0\0\0\0\0\0\0\0\x0fUsedEventSimple\0\0\0\0\x01\0\0\0\x11used_event_simple\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x04kind\0\0\0\x11\0\0\0\x01\0\0\0\0\0\0\0\x06amount\0\0\0\0\0\x0b\0\0\0\0\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for UsedEventSimple { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::Event for UsedEventSimple { fn topics(&self, env: &soroban_sdk::Env) -> soroban_sdk::Vec { use soroban_sdk::IntoVal; @@ -3811,7 +3737,6 @@ impl soroban_sdk::Event for UsedEventSimple { } impl UsedEventSimple { pub fn publish(&self, env: &soroban_sdk::Env) { - ::spec_shaking_marker(); <_ as soroban_sdk::Event>::publish(self, env); } } @@ -3865,11 +3790,6 @@ impl UsedEventTopicType { *b"\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x12UsedEventTopicType\0\0\0\0\0\x02\0\0\0\0\0\0\0\x08Transfer\0\0\0\x01\0\0\0\0\0\0\0\x04Mint\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for UsedEventTopicType { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl soroban_sdk::TryFromVal for UsedEventTopicType { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -4202,14 +4122,6 @@ impl UsedEventWithTopicType { *b"\0\0\0\x05\0\0\0\0\0\0\0\0\0\0\0\x16UsedEventWithTopicType\0\0\0\0\0\x01\0\0\0\x1aused_event_with_topic_type\0\0\0\0\0\x02\0\0\0\0\0\0\0\x04kind\0\0\x07\xd0\0\0\0\x12UsedEventTopicType\0\0\0\0\0\x01\0\0\0\0\0\0\0\x06amount\0\0\0\0\0\x0b\0\0\0\0\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for UsedEventWithTopicType { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::Event for UsedEventWithTopicType { fn topics(&self, env: &soroban_sdk::Env) -> soroban_sdk::Vec { use soroban_sdk::IntoVal; @@ -4233,7 +4145,6 @@ impl soroban_sdk::Event for UsedEventWithTopicType { } impl UsedEventWithTopicType { pub fn publish(&self, env: &soroban_sdk::Env) { - ::spec_shaking_marker(); <_ as soroban_sdk::Event>::publish(self, env); } } @@ -4289,14 +4200,6 @@ impl UsedEventDataType { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x11UsedEventDataType\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x01x\0\0\0\0\0\0\x04\0\0\0\0\0\0\0\x01y\0\0\0\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for UsedEventDataType { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedEventDataType { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -4713,14 +4616,6 @@ impl UsedEventWithDataType { *b"\0\0\0\x05\0\0\0\0\0\0\0\0\0\0\0\x15UsedEventWithDataType\0\0\0\0\0\0\x01\0\0\0\x19used_event_with_data_type\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x04kind\0\0\0\x11\0\0\0\x01\0\0\0\0\0\0\0\x07payload\0\0\0\x07\xd0\0\0\0\x11UsedEventDataType\0\0\0\0\0\0\0\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for UsedEventWithDataType { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::Event for UsedEventWithDataType { fn topics(&self, env: &soroban_sdk::Env) -> soroban_sdk::Vec { use soroban_sdk::IntoVal; @@ -4744,7 +4639,6 @@ impl soroban_sdk::Event for UsedEventWithDataType { } impl UsedEventWithDataType { pub fn publish(&self, env: &soroban_sdk::Env) { - ::spec_shaking_marker(); <_ as soroban_sdk::Event>::publish(self, env); } } @@ -4796,13 +4690,6 @@ impl UsedEventTopicOuter { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x13UsedEventTopicOuter\0\0\0\0\x01\0\0\0\0\0\0\0\x05inner\0\0\0\0\0\x07\xd0\0\0\0\x13UsedEventTopicInner\0" } } -impl soroban_sdk::SpecShakingMarker for UsedEventTopicOuter { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedEventTopicOuter { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -5170,13 +5057,6 @@ impl UsedEventTopicInner { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x13UsedEventTopicInner\0\0\0\0\x01\0\0\0\0\0\0\0\x03val\0\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for UsedEventTopicInner { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedEventTopicInner { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -5547,14 +5427,6 @@ impl UsedEventWithNestedTopic { *b"\0\0\0\x05\0\0\0\0\0\0\0\0\0\0\0\x18UsedEventWithNestedTopic\0\0\0\x01\0\0\0\x1cused_event_with_nested_topic\0\0\0\x02\0\0\0\0\0\0\0\x04info\0\0\x07\xd0\0\0\0\x13UsedEventTopicOuter\0\0\0\0\x01\0\0\0\0\0\0\0\x06amount\0\0\0\0\0\x0b\0\0\0\0\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for UsedEventWithNestedTopic { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::Event for UsedEventWithNestedTopic { fn topics(&self, env: &soroban_sdk::Env) -> soroban_sdk::Vec { use soroban_sdk::IntoVal; @@ -5578,7 +5450,6 @@ impl soroban_sdk::Event for UsedEventWithNestedTopic { } impl UsedEventWithNestedTopic { pub fn publish(&self, env: &soroban_sdk::Env) { - ::spec_shaking_marker(); <_ as soroban_sdk::Event>::publish(self, env); } } @@ -5630,13 +5501,6 @@ impl UsedEventDataOuter { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x12UsedEventDataOuter\0\0\0\0\0\x01\0\0\0\0\0\0\0\x05inner\0\0\0\0\0\x07\xd0\0\0\0\x12UsedEventDataInner\0\0" } } -impl soroban_sdk::SpecShakingMarker for UsedEventDataOuter { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedEventDataOuter { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -6002,13 +5866,6 @@ impl UsedEventDataInner { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x12UsedEventDataInner\0\0\0\0\0\x01\0\0\0\0\0\0\0\x03val\0\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for UsedEventDataInner { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedEventDataInner { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -6377,14 +6234,6 @@ impl UsedEventWithNestedData { *b"\0\0\0\x05\0\0\0\0\0\0\0\0\0\0\0\x17UsedEventWithNestedData\0\0\0\0\x01\0\0\0\x1bused_event_with_nested_data\0\0\0\0\x02\0\0\0\0\0\0\0\x04kind\0\0\0\x11\0\0\0\x01\0\0\0\0\0\0\0\x07payload\0\0\0\x07\xd0\0\0\0\x12UsedEventDataOuter\0\0\0\0\0\0\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for UsedEventWithNestedData { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::Event for UsedEventWithNestedData { fn topics(&self, env: &soroban_sdk::Env) -> soroban_sdk::Vec { use soroban_sdk::IntoVal; @@ -6408,7 +6257,6 @@ impl soroban_sdk::Event for UsedEventWithNestedData { } impl UsedEventWithNestedData { pub fn publish(&self, env: &soroban_sdk::Env) { - ::spec_shaking_marker(); <_ as soroban_sdk::Event>::publish(self, env); } } @@ -6462,11 +6310,6 @@ impl UsedRefTopicType { *b"\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x10UsedRefTopicType\0\0\0\x02\0\0\0\0\0\0\0\x04Send\0\0\0\x01\0\0\0\0\0\0\0\x04Recv\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for UsedRefTopicType { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl soroban_sdk::TryFromVal for UsedRefTopicType { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -6791,13 +6634,6 @@ impl UsedRefDataType { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x0fUsedRefDataType\0\0\0\0\x01\0\0\0\0\0\0\0\x06nested\0\0\0\0\x07\xd0\0\0\0\x10UsedRefDataInner" } } -impl soroban_sdk::SpecShakingMarker for UsedRefDataType { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedRefDataType { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -7156,13 +6992,6 @@ impl UsedRefDataInner { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x10UsedRefDataInner\0\0\0\x01\0\0\0\0\0\0\0\x03val\0\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for UsedRefDataInner { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedRefDataInner { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -7528,14 +7357,6 @@ impl<'a> UsedEventWithRefs<'a> { *b"\0\0\0\x05\0\0\0\0\0\0\0\0\0\0\0\x11UsedEventWithRefs\0\0\0\0\0\0\x01\0\0\0\x14used_event_with_refs\0\0\0\x02\0\0\0\0\0\0\0\x04kind\0\0\x07\xd0\0\0\0\x10UsedRefTopicType\0\0\0\x01\0\0\0\0\0\0\0\x07payload\0\0\0\x07\xd0\0\0\0\x0fUsedRefDataType\0\0\0\0\0\0\0\0\x02" } } -impl<'a> soroban_sdk::SpecShakingMarker for UsedEventWithRefs<'a> { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - <&'a UsedRefTopicType as soroban_sdk::SpecShakingMarker>::spec_shaking_marker(); - <&'a UsedRefDataType as soroban_sdk::SpecShakingMarker>::spec_shaking_marker(); - } -} impl<'a> soroban_sdk::Event for UsedEventWithRefs<'a> { fn topics(&self, env: &soroban_sdk::Env) -> soroban_sdk::Vec { use soroban_sdk::IntoVal; @@ -7559,7 +7380,6 @@ impl<'a> soroban_sdk::Event for UsedEventWithRefs<'a> { } impl<'a> UsedEventWithRefs<'a> { pub fn publish(&self, env: &soroban_sdk::Env) { - ::spec_shaking_marker(); <_ as soroban_sdk::Event>::publish(self, env); } } @@ -7606,13 +7426,6 @@ impl UsedTupleElement { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x10UsedTupleElement\0\0\0\x01\0\0\0\0\0\0\0\x03val\0\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for UsedTupleElement { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedTupleElement { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -7974,13 +7787,6 @@ impl UsedTupleReturnElement { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x16UsedTupleReturnElement\0\0\0\0\0\x01\0\0\0\0\0\0\0\x03val\0\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for UsedTupleReturnElement { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedTupleReturnElement { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -8334,19 +8140,6 @@ impl ::core::cmp::PartialEq for UsedNonPubStruct { self.val == other.val } } -pub static __SPEC_XDR_TYPE_USEDNONPUBSTRUCT: [u8; 52usize] = UsedNonPubStruct::spec_xdr(); -impl UsedNonPubStruct { - pub const fn spec_xdr() -> [u8; 52usize] { - *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x10UsedNonPubStruct\0\0\0\x01\0\0\0\0\0\0\0\x03val\0\0\0\0\x04" - } -} -impl soroban_sdk::SpecShakingMarker for UsedNonPubStruct { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedNonPubStruct { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -8694,17 +8487,6 @@ impl ::core::cmp::PartialEq for UsedNonPubError { true } } -pub static __SPEC_XDR_TYPE_USEDNONPUBERROR: [u8; 52usize] = UsedNonPubError::spec_xdr(); -impl UsedNonPubError { - pub const fn spec_xdr() -> [u8; 52usize] { - *b"\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\x0fUsedNonPubError\0\0\0\0\x01\0\0\0\0\0\0\0\x04Fail\0\0\0\x01" - } -} -impl soroban_sdk::SpecShakingMarker for UsedNonPubError { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl TryFrom for UsedNonPubError { type Error = soroban_sdk::Error; #[inline(always)] @@ -9491,20 +9273,6 @@ mod wasm_imported { } } } - pub static __SPEC_XDR_TYPE_STRUCTA: [u8; 60usize] = StructA::spec_xdr(); - impl StructA { - pub const fn spec_xdr() -> [u8; 60usize] { - *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x07StructA\0\0\0\0\x02\0\0\0\0\0\0\0\x02f1\0\0\0\0\0\x04\0\0\0\0\0\0\0\x02f2\0\0\0\0\0\x01" - } - } - impl soroban_sdk::SpecShakingMarker for StructA { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } - } impl soroban_sdk::TryFromVal for StructA { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -9931,20 +9699,6 @@ mod wasm_imported { } } } - pub static __SPEC_XDR_TYPE_STRUCTB: [u8; 60usize] = StructB::spec_xdr(); - impl StructB { - pub const fn spec_xdr() -> [u8; 60usize] { - *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x07StructB\0\0\0\0\x02\0\0\0\0\0\0\0\x02f1\0\0\0\0\0\x07\0\0\0\0\0\0\0\x02f2\0\0\0\0\0\x10" - } - } - impl soroban_sdk::SpecShakingMarker for StructB { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } - } impl soroban_sdk::TryFromVal for StructB { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -10371,20 +10125,6 @@ mod wasm_imported { } } } - pub static __SPEC_XDR_TYPE_STRUCTC: [u8; 64usize] = StructC::spec_xdr(); - impl StructC { - pub const fn spec_xdr() -> [u8; 64usize] { - *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x07StructC\0\0\0\0\x02\0\0\0\0\0\0\0\x02f1\0\0\0\0\x03\xea\0\0\0\x04\0\0\0\0\0\0\0\x02f2\0\0\0\0\0\x13" - } - } - impl soroban_sdk::SpecShakingMarker for StructC { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - as soroban_sdk::SpecShakingMarker>::spec_shaking_marker(); - ::spec_shaking_marker(); - } - } impl soroban_sdk::TryFromVal for StructC { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -10814,20 +10554,6 @@ mod wasm_imported { } } } - pub static __SPEC_XDR_TYPE_STRUCTTUPLEA: [u8; 64usize] = StructTupleA::spec_xdr(); - impl StructTupleA { - pub const fn spec_xdr() -> [u8; 64usize] { - *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x0cStructTupleA\0\0\0\x02\0\0\0\0\0\0\0\x010\0\0\0\0\0\0\x07\0\0\0\0\0\0\0\x011\0\0\0\0\0\0\x07" - } - } - impl soroban_sdk::SpecShakingMarker for StructTupleA { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } - } impl soroban_sdk::TryFromVal for StructTupleA { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -11219,20 +10945,6 @@ mod wasm_imported { } } } - pub static __SPEC_XDR_TYPE_STRUCTTUPLEB: [u8; 64usize] = StructTupleB::spec_xdr(); - impl StructTupleB { - pub const fn spec_xdr() -> [u8; 64usize] { - *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x0cStructTupleB\0\0\0\x02\0\0\0\0\0\0\0\x010\0\0\0\0\0\0\n\0\0\0\0\0\0\0\x011\0\0\0\0\0\0\n" - } - } - impl soroban_sdk::SpecShakingMarker for StructTupleB { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } - } impl soroban_sdk::TryFromVal for StructTupleB { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -11625,20 +11337,6 @@ mod wasm_imported { } } } - pub static __SPEC_XDR_TYPE_STRUCTTUPLEC: [u8; 64usize] = StructTupleC::spec_xdr(); - impl StructTupleC { - pub const fn spec_xdr() -> [u8; 64usize] { - *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x0cStructTupleC\0\0\0\x02\0\0\0\0\0\0\0\x010\0\0\0\0\0\0\x13\0\0\0\0\0\0\0\x011\0\0\0\0\0\0\x0b" - } - } - impl soroban_sdk::SpecShakingMarker for StructTupleC { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } - } impl soroban_sdk::TryFromVal for StructTupleC { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -12035,17 +11733,6 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } - pub static __SPEC_XDR_TYPE_ENUMA: [u8; 76usize] = EnumA::spec_xdr(); - impl EnumA { - pub const fn spec_xdr() -> [u8; 76usize] { - *b"\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\x05EnumA\0\0\0\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x02V1\0\0\0\0\0\0\0\0\0\0\0\0\0\x02V2\0\0\0\0\0\0\0\0\0\0\0\0\0\x02V3\0\0" - } - } - impl soroban_sdk::SpecShakingMarker for EnumA { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} - } impl soroban_sdk::TryFromVal for EnumA { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -12557,19 +12244,6 @@ mod wasm_imported { } } } - pub static __SPEC_XDR_TYPE_ENUMB: [u8; 96usize] = EnumB::spec_xdr(); - impl EnumB { - pub const fn spec_xdr() -> [u8; 96usize] { - *b"\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\x05EnumB\0\0\0\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x02V1\0\0\0\0\0\x01\0\0\0\0\0\0\0\x02V2\0\0\0\0\0\x01\0\0\0\x07\0\0\0\x01\0\0\0\0\0\0\0\x02V3\0\0\0\0\0\x02\0\0\0\x07\0\0\0\x07" - } - } - impl soroban_sdk::SpecShakingMarker for EnumB { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } - } impl soroban_sdk::TryFromVal for EnumB { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -13197,20 +12871,6 @@ mod wasm_imported { } } } - pub static __SPEC_XDR_TYPE_ENUMC: [u8; 120usize] = EnumC::spec_xdr(); - impl EnumC { - pub const fn spec_xdr() -> [u8; 120usize] { - *b"\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\x05EnumC\0\0\0\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x02V1\0\0\0\0\0\x01\0\0\0\0\0\0\0\x02V2\0\0\0\0\0\x01\0\0\x07\xd0\0\0\0\x07StructA\0\0\0\0\x01\0\0\0\0\0\0\0\x02V3\0\0\0\0\0\x01\0\0\x07\xd0\0\0\0\x0cStructTupleA" - } - } - impl soroban_sdk::SpecShakingMarker for EnumC { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } - } impl soroban_sdk::TryFromVal for EnumC { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -13766,17 +13426,6 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } - pub static __SPEC_XDR_TYPE_ENUMINTA: [u8; 76usize] = EnumIntA::spec_xdr(); - impl EnumIntA { - pub const fn spec_xdr() -> [u8; 76usize] { - *b"\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x08EnumIntA\0\0\0\x03\0\0\0\0\0\0\0\x02V1\0\0\0\0\0\x01\0\0\0\0\0\0\0\x02V2\0\0\0\0\0\x02\0\0\0\0\0\0\0\x02V3\0\0\0\0\0\x03" - } - } - impl soroban_sdk::SpecShakingMarker for EnumIntA { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} - } impl soroban_sdk::TryFromVal for EnumIntA { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -14131,17 +13780,6 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } - pub static __SPEC_XDR_TYPE_ENUMINTB: [u8; 76usize] = EnumIntB::spec_xdr(); - impl EnumIntB { - pub const fn spec_xdr() -> [u8; 76usize] { - *b"\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x08EnumIntB\0\0\0\x03\0\0\0\0\0\0\0\x02V1\0\0\0\0\0\n\0\0\0\0\0\0\0\x02V2\0\0\0\0\0\x14\0\0\0\0\0\0\0\x02V3\0\0\0\0\0\x1e" - } - } - impl soroban_sdk::SpecShakingMarker for EnumIntB { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} - } impl soroban_sdk::TryFromVal for EnumIntB { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -14496,17 +14134,6 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } - pub static __SPEC_XDR_TYPE_ENUMINTC: [u8; 76usize] = EnumIntC::spec_xdr(); - impl EnumIntC { - pub const fn spec_xdr() -> [u8; 76usize] { - *b"\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x08EnumIntC\0\0\0\x03\0\0\0\0\0\0\0\x02V1\0\0\0\0\0d\0\0\0\0\0\0\0\x02V2\0\0\0\0\0\xc8\0\0\0\0\0\0\0\x02V3\0\0\0\0\x01," - } - } - impl soroban_sdk::SpecShakingMarker for EnumIntC { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} - } impl soroban_sdk::TryFromVal for EnumIntC { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -14861,17 +14488,6 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } - pub static __SPEC_XDR_TYPE_ERRORA: [u8; 76usize] = ErrorA::spec_xdr(); - impl ErrorA { - pub const fn spec_xdr() -> [u8; 76usize] { - *b"\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\x06ErrorA\0\0\0\0\0\x03\0\0\0\0\0\0\0\x02E1\0\0\0\0\0\x01\0\0\0\0\0\0\0\x02E2\0\0\0\0\0\x02\0\0\0\0\0\0\0\x02E3\0\0\0\0\0\x03" - } - } - impl soroban_sdk::SpecShakingMarker for ErrorA { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} - } impl TryFrom for ErrorA { type Error = soroban_sdk::Error; #[inline(always)] @@ -15047,17 +14663,6 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } - pub static __SPEC_XDR_TYPE_ERRORB: [u8; 76usize] = ErrorB::spec_xdr(); - impl ErrorB { - pub const fn spec_xdr() -> [u8; 76usize] { - *b"\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\x06ErrorB\0\0\0\0\0\x03\0\0\0\0\0\0\0\x02E1\0\0\0\0\0\n\0\0\0\0\0\0\0\x02E2\0\0\0\0\0\x0b\0\0\0\0\0\0\0\x02E3\0\0\0\0\0\x0c" - } - } - impl soroban_sdk::SpecShakingMarker for ErrorB { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} - } impl TryFrom for ErrorB { type Error = soroban_sdk::Error; #[inline(always)] @@ -15233,17 +14838,6 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } - pub static __SPEC_XDR_TYPE_ERRORC: [u8; 76usize] = ErrorC::spec_xdr(); - impl ErrorC { - pub const fn spec_xdr() -> [u8; 76usize] { - *b"\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\x06ErrorC\0\0\0\0\0\x03\0\0\0\0\0\0\0\x02E1\0\0\0\0\0d\0\0\0\0\0\0\0\x02E2\0\0\0\0\0e\0\0\0\0\0\0\0\x02E3\0\0\0\0\0f" - } - } - impl soroban_sdk::SpecShakingMarker for ErrorC { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} - } impl TryFrom for ErrorC { type Error = soroban_sdk::Error; #[inline(always)] @@ -15425,14 +15019,6 @@ mod wasm_imported { *b"\0\0\0\x05\0\0\0\0\0\0\0\0\0\0\0\x06EventA\0\0\0\0\0\x01\0\0\0\x07event_a\0\0\0\0\x02\0\0\0\0\0\0\0\x02f1\0\0\0\0\0\x13\0\0\0\x01\0\0\0\0\0\0\0\x02f2\0\0\0\0\0\x10\0\0\0\0\0\0\0\x02" } } - impl soroban_sdk::SpecShakingMarker for EventA { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } - } impl soroban_sdk::Event for EventA { fn topics(&self, env: &soroban_sdk::Env) -> soroban_sdk::Vec { use soroban_sdk::IntoVal; @@ -15460,7 +15046,6 @@ mod wasm_imported { } impl EventA { pub fn publish(&self, env: &soroban_sdk::Env) { - ::spec_shaking_marker(); <_ as soroban_sdk::Event>::publish(self, env); } } @@ -15545,15 +15130,6 @@ mod wasm_imported { *b"\0\0\0\x05\0\0\0\0\0\0\0\0\0\0\0\x06EventB\0\0\0\0\0\x01\0\0\0\x07event_b\0\0\0\0\x03\0\0\0\0\0\0\0\x02f1\0\0\0\0\0\x13\0\0\0\x01\0\0\0\0\0\0\0\x02f2\0\0\0\0\0\x13\0\0\0\x01\0\0\0\0\0\0\0\x02f3\0\0\0\0\0\x0b\0\0\0\0\0\0\0\x02" } } - impl soroban_sdk::SpecShakingMarker for EventB { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } - } impl soroban_sdk::Event for EventB { fn topics(&self, env: &soroban_sdk::Env) -> soroban_sdk::Vec { use soroban_sdk::IntoVal; @@ -15585,7 +15161,6 @@ mod wasm_imported { } impl EventB { pub fn publish(&self, env: &soroban_sdk::Env) { - ::spec_shaking_marker(); <_ as soroban_sdk::Event>::publish(self, env); } } @@ -15669,15 +15244,6 @@ mod wasm_imported { *b"\0\0\0\x05\0\0\0\0\0\0\0\0\0\0\0\x06EventC\0\0\0\0\0\x01\0\0\0\x07event_c\0\0\0\0\x03\0\0\0\0\0\0\0\x02f1\0\0\0\0\0\x11\0\0\0\x01\0\0\0\0\0\0\0\x02f2\0\0\0\0\0\x07\0\0\0\0\0\0\0\0\0\0\0\x02f3\0\0\0\0\0\x07\0\0\0\0\0\0\0\x02" } } - impl soroban_sdk::SpecShakingMarker for EventC { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } - } impl soroban_sdk::Event for EventC { fn topics(&self, env: &soroban_sdk::Env) -> soroban_sdk::Vec { use soroban_sdk::IntoVal; @@ -15705,7 +15271,6 @@ mod wasm_imported { } impl EventC { pub fn publish(&self, env: &soroban_sdk::Env) { - ::spec_shaking_marker(); <_ as soroban_sdk::Event>::publish(self, env); } } @@ -15753,13 +15318,6 @@ impl UnusedStruct { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x0cUnusedStruct\0\0\0\x01\0\0\0\0\0\0\0\x01x\0\0\0\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for UnusedStruct { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UnusedStruct { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -16124,13 +15682,6 @@ impl UnusedEnum { *b"\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\nUnusedEnum\0\0\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\x01A\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\x01B\0\0\0\0\0\0\x01\0\0\0\x07" } } -impl soroban_sdk::SpecShakingMarker for UnusedEnum { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UnusedEnum { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -16594,11 +16145,6 @@ impl UnusedIntEnum { *b"\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\rUnusedIntEnum\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x02U1\0\0\0\0\0\x01\0\0\0\0\0\0\0\x02U2\0\0\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for UnusedIntEnum { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl soroban_sdk::TryFromVal for UnusedIntEnum { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -16928,14 +16474,6 @@ impl UnusedEvent { *b"\0\0\0\x05\0\0\0\0\0\0\0\0\0\0\0\x0bUnusedEvent\0\0\0\0\x01\0\0\0\x0cunused_event\0\0\0\x02\0\0\0\0\0\0\0\x04kind\0\0\0\x11\0\0\0\x01\0\0\0\0\0\0\0\x04data\0\0\0\x04\0\0\0\0\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for UnusedEvent { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::Event for UnusedEvent { fn topics(&self, env: &soroban_sdk::Env) -> soroban_sdk::Vec { use soroban_sdk::IntoVal; @@ -16956,7 +16494,6 @@ impl soroban_sdk::Event for UnusedEvent { } impl UnusedEvent { pub fn publish(&self, env: &soroban_sdk::Env) { - ::spec_shaking_marker(); <_ as soroban_sdk::Event>::publish(self, env); } } @@ -17009,13 +16546,6 @@ impl UnusedNonContractFnParam { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x18UnusedNonContractFnParam\0\0\0\x01\0\0\0\0\0\0\0\x01x\0\0\0\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for UnusedNonContractFnParam { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UnusedNonContractFnParam { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -17383,13 +16913,6 @@ impl UnusedNonContractFnReturn { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x19UnusedNonContractFnReturn\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\x01x\0\0\0\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for UnusedNonContractFnReturn { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UnusedNonContractFnReturn { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -17745,19 +17268,6 @@ impl ::core::cmp::PartialEq for UnusedNonPubStruct { self.x == other.x } } -pub static __SPEC_XDR_TYPE_UNUSEDNONPUBSTRUCT: [u8; 56usize] = UnusedNonPubStruct::spec_xdr(); -impl UnusedNonPubStruct { - pub const fn spec_xdr() -> [u8; 56usize] { - *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x12UnusedNonPubStruct\0\0\0\0\0\x01\0\0\0\0\0\0\0\x01x\0\0\0\0\0\0\x04" - } -} -impl soroban_sdk::SpecShakingMarker for UnusedNonPubStruct { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UnusedNonPubStruct { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -18105,17 +17615,6 @@ impl ::core::cmp::PartialEq for UnusedNonPubError { true } } -pub static __SPEC_XDR_TYPE_UNUSEDNONPUBERROR: [u8; 56usize] = UnusedNonPubError::spec_xdr(); -impl UnusedNonPubError { - pub const fn spec_xdr() -> [u8; 56usize] { - *b"\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\x11UnusedNonPubError\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\x03Bad\0\0\0\0\x01" - } -} -impl soroban_sdk::SpecShakingMarker for UnusedNonPubError { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl TryFrom for UnusedNonPubError { type Error = soroban_sdk::Error; #[inline(always)] diff --git a/tests-expanded/test_spec_shaking_v2_tests.rs b/tests-expanded/test_spec_shaking_v2_tests.rs index 7003422c8..212478634 100644 --- a/tests-expanded/test_spec_shaking_v2_tests.rs +++ b/tests-expanded/test_spec_shaking_v2_tests.rs @@ -191,14 +191,6 @@ impl UsedParamStruct { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x0fUsedParamStruct\0\0\0\0\x02\0\0\0\0\0\0\0\x01a\0\0\0\0\0\0\x04\0\0\0\0\0\0\0\x06nested\0\0\0\0\x07\xd0\0\0\0\x12UsedNestedInStruct\0\0" } } -impl soroban_sdk::SpecShakingMarker for UsedParamStruct { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedParamStruct { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -626,14 +618,6 @@ impl UsedReturnEnum { *b"\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\x0eUsedReturnEnum\0\0\0\0\0\x02\0\0\0\x01\0\0\0\0\0\0\0\x01A\0\0\0\0\0\0\x01\0\0\0\x04\0\0\0\x01\0\0\0\0\0\0\0\x01B\0\0\0\0\0\0\x01\0\0\0\x07" } } -impl soroban_sdk::SpecShakingMarker for UsedReturnEnum { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedReturnEnum { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -1142,11 +1126,6 @@ impl UsedParamIntEnum { *b"\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x10UsedParamIntEnum\0\0\0\x02\0\0\0\0\0\0\0\x01X\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\x01Y\0\0\0\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for UsedParamIntEnum { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl soroban_sdk::TryFromVal for UsedParamIntEnum { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -1473,11 +1452,6 @@ impl UsedErrorEnum { *b"\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\rUsedErrorEnum\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x08NotFound\0\0\0\x01\0\0\0\0\0\0\0\x07Invalid\0\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for UsedErrorEnum { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl TryFrom for UsedErrorEnum { type Error = soroban_sdk::Error; #[inline(always)] @@ -1633,13 +1607,6 @@ impl UsedNestedInStruct { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x12UsedNestedInStruct\0\0\0\0\0\x01\0\0\0\0\0\0\0\x03val\0\0\0\0\x07" } } -impl soroban_sdk::SpecShakingMarker for UsedNestedInStruct { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedNestedInStruct { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -1997,13 +1964,6 @@ impl UsedVecElement { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x0eUsedVecElement\0\0\0\0\0\x01\0\0\0\0\0\0\0\x04data\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for UsedVecElement { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedVecElement { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -2366,11 +2326,6 @@ impl UsedMapKey { *b"\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\nUsedMapKey\0\0\0\0\0\x02\0\0\0\0\0\0\0\x02K1\0\0\0\0\0\x01\0\0\0\0\0\0\0\x02K2\0\0\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for UsedMapKey { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl soroban_sdk::TryFromVal for UsedMapKey { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -2688,13 +2643,6 @@ impl UsedMapVal { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\nUsedMapVal\0\0\0\0\0\x01\0\0\0\0\0\0\0\x01v\0\0\0\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for UsedMapVal { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedMapVal { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -3051,13 +2999,6 @@ impl UsedOptionElement { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x11UsedOptionElement\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\x04data\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for UsedOptionElement { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedOptionElement { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -3413,13 +3354,6 @@ impl UsedResultOk { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x0cUsedResultOk\0\0\0\x01\0\0\0\0\0\0\0\x04data\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for UsedResultOk { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedResultOk { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -3783,14 +3717,6 @@ impl UsedEventSimple { *b"\0\0\0\x05\0\0\0\0\0\0\0\0\0\0\0\x0fUsedEventSimple\0\0\0\0\x01\0\0\0\x11used_event_simple\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x04kind\0\0\0\x11\0\0\0\x01\0\0\0\0\0\0\0\x06amount\0\0\0\0\0\x0b\0\0\0\0\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for UsedEventSimple { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::Event for UsedEventSimple { fn topics(&self, env: &soroban_sdk::Env) -> soroban_sdk::Vec { use soroban_sdk::IntoVal; @@ -3811,7 +3737,6 @@ impl soroban_sdk::Event for UsedEventSimple { } impl UsedEventSimple { pub fn publish(&self, env: &soroban_sdk::Env) { - ::spec_shaking_marker(); <_ as soroban_sdk::Event>::publish(self, env); } } @@ -3865,11 +3790,6 @@ impl UsedEventTopicType { *b"\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x12UsedEventTopicType\0\0\0\0\0\x02\0\0\0\0\0\0\0\x08Transfer\0\0\0\x01\0\0\0\0\0\0\0\x04Mint\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for UsedEventTopicType { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl soroban_sdk::TryFromVal for UsedEventTopicType { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -4202,14 +4122,6 @@ impl UsedEventWithTopicType { *b"\0\0\0\x05\0\0\0\0\0\0\0\0\0\0\0\x16UsedEventWithTopicType\0\0\0\0\0\x01\0\0\0\x1aused_event_with_topic_type\0\0\0\0\0\x02\0\0\0\0\0\0\0\x04kind\0\0\x07\xd0\0\0\0\x12UsedEventTopicType\0\0\0\0\0\x01\0\0\0\0\0\0\0\x06amount\0\0\0\0\0\x0b\0\0\0\0\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for UsedEventWithTopicType { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::Event for UsedEventWithTopicType { fn topics(&self, env: &soroban_sdk::Env) -> soroban_sdk::Vec { use soroban_sdk::IntoVal; @@ -4233,7 +4145,6 @@ impl soroban_sdk::Event for UsedEventWithTopicType { } impl UsedEventWithTopicType { pub fn publish(&self, env: &soroban_sdk::Env) { - ::spec_shaking_marker(); <_ as soroban_sdk::Event>::publish(self, env); } } @@ -4289,14 +4200,6 @@ impl UsedEventDataType { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x11UsedEventDataType\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x01x\0\0\0\0\0\0\x04\0\0\0\0\0\0\0\x01y\0\0\0\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for UsedEventDataType { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedEventDataType { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -4713,14 +4616,6 @@ impl UsedEventWithDataType { *b"\0\0\0\x05\0\0\0\0\0\0\0\0\0\0\0\x15UsedEventWithDataType\0\0\0\0\0\0\x01\0\0\0\x19used_event_with_data_type\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x04kind\0\0\0\x11\0\0\0\x01\0\0\0\0\0\0\0\x07payload\0\0\0\x07\xd0\0\0\0\x11UsedEventDataType\0\0\0\0\0\0\0\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for UsedEventWithDataType { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::Event for UsedEventWithDataType { fn topics(&self, env: &soroban_sdk::Env) -> soroban_sdk::Vec { use soroban_sdk::IntoVal; @@ -4744,7 +4639,6 @@ impl soroban_sdk::Event for UsedEventWithDataType { } impl UsedEventWithDataType { pub fn publish(&self, env: &soroban_sdk::Env) { - ::spec_shaking_marker(); <_ as soroban_sdk::Event>::publish(self, env); } } @@ -4796,13 +4690,6 @@ impl UsedEventTopicOuter { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x13UsedEventTopicOuter\0\0\0\0\x01\0\0\0\0\0\0\0\x05inner\0\0\0\0\0\x07\xd0\0\0\0\x13UsedEventTopicInner\0" } } -impl soroban_sdk::SpecShakingMarker for UsedEventTopicOuter { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedEventTopicOuter { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -5170,13 +5057,6 @@ impl UsedEventTopicInner { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x13UsedEventTopicInner\0\0\0\0\x01\0\0\0\0\0\0\0\x03val\0\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for UsedEventTopicInner { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedEventTopicInner { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -5547,14 +5427,6 @@ impl UsedEventWithNestedTopic { *b"\0\0\0\x05\0\0\0\0\0\0\0\0\0\0\0\x18UsedEventWithNestedTopic\0\0\0\x01\0\0\0\x1cused_event_with_nested_topic\0\0\0\x02\0\0\0\0\0\0\0\x04info\0\0\x07\xd0\0\0\0\x13UsedEventTopicOuter\0\0\0\0\x01\0\0\0\0\0\0\0\x06amount\0\0\0\0\0\x0b\0\0\0\0\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for UsedEventWithNestedTopic { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::Event for UsedEventWithNestedTopic { fn topics(&self, env: &soroban_sdk::Env) -> soroban_sdk::Vec { use soroban_sdk::IntoVal; @@ -5578,7 +5450,6 @@ impl soroban_sdk::Event for UsedEventWithNestedTopic { } impl UsedEventWithNestedTopic { pub fn publish(&self, env: &soroban_sdk::Env) { - ::spec_shaking_marker(); <_ as soroban_sdk::Event>::publish(self, env); } } @@ -5630,13 +5501,6 @@ impl UsedEventDataOuter { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x12UsedEventDataOuter\0\0\0\0\0\x01\0\0\0\0\0\0\0\x05inner\0\0\0\0\0\x07\xd0\0\0\0\x12UsedEventDataInner\0\0" } } -impl soroban_sdk::SpecShakingMarker for UsedEventDataOuter { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedEventDataOuter { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -6002,13 +5866,6 @@ impl UsedEventDataInner { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x12UsedEventDataInner\0\0\0\0\0\x01\0\0\0\0\0\0\0\x03val\0\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for UsedEventDataInner { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedEventDataInner { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -6377,14 +6234,6 @@ impl UsedEventWithNestedData { *b"\0\0\0\x05\0\0\0\0\0\0\0\0\0\0\0\x17UsedEventWithNestedData\0\0\0\0\x01\0\0\0\x1bused_event_with_nested_data\0\0\0\0\x02\0\0\0\0\0\0\0\x04kind\0\0\0\x11\0\0\0\x01\0\0\0\0\0\0\0\x07payload\0\0\0\x07\xd0\0\0\0\x12UsedEventDataOuter\0\0\0\0\0\0\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for UsedEventWithNestedData { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::Event for UsedEventWithNestedData { fn topics(&self, env: &soroban_sdk::Env) -> soroban_sdk::Vec { use soroban_sdk::IntoVal; @@ -6408,7 +6257,6 @@ impl soroban_sdk::Event for UsedEventWithNestedData { } impl UsedEventWithNestedData { pub fn publish(&self, env: &soroban_sdk::Env) { - ::spec_shaking_marker(); <_ as soroban_sdk::Event>::publish(self, env); } } @@ -6462,11 +6310,6 @@ impl UsedRefTopicType { *b"\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x10UsedRefTopicType\0\0\0\x02\0\0\0\0\0\0\0\x04Send\0\0\0\x01\0\0\0\0\0\0\0\x04Recv\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for UsedRefTopicType { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl soroban_sdk::TryFromVal for UsedRefTopicType { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -6791,13 +6634,6 @@ impl UsedRefDataType { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x0fUsedRefDataType\0\0\0\0\x01\0\0\0\0\0\0\0\x06nested\0\0\0\0\x07\xd0\0\0\0\x10UsedRefDataInner" } } -impl soroban_sdk::SpecShakingMarker for UsedRefDataType { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedRefDataType { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -7156,13 +6992,6 @@ impl UsedRefDataInner { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x10UsedRefDataInner\0\0\0\x01\0\0\0\0\0\0\0\x03val\0\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for UsedRefDataInner { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedRefDataInner { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -7528,14 +7357,6 @@ impl<'a> UsedEventWithRefs<'a> { *b"\0\0\0\x05\0\0\0\0\0\0\0\0\0\0\0\x11UsedEventWithRefs\0\0\0\0\0\0\x01\0\0\0\x14used_event_with_refs\0\0\0\x02\0\0\0\0\0\0\0\x04kind\0\0\x07\xd0\0\0\0\x10UsedRefTopicType\0\0\0\x01\0\0\0\0\0\0\0\x07payload\0\0\0\x07\xd0\0\0\0\x0fUsedRefDataType\0\0\0\0\0\0\0\0\x02" } } -impl<'a> soroban_sdk::SpecShakingMarker for UsedEventWithRefs<'a> { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - <&'a UsedRefTopicType as soroban_sdk::SpecShakingMarker>::spec_shaking_marker(); - <&'a UsedRefDataType as soroban_sdk::SpecShakingMarker>::spec_shaking_marker(); - } -} impl<'a> soroban_sdk::Event for UsedEventWithRefs<'a> { fn topics(&self, env: &soroban_sdk::Env) -> soroban_sdk::Vec { use soroban_sdk::IntoVal; @@ -7559,7 +7380,6 @@ impl<'a> soroban_sdk::Event for UsedEventWithRefs<'a> { } impl<'a> UsedEventWithRefs<'a> { pub fn publish(&self, env: &soroban_sdk::Env) { - ::spec_shaking_marker(); <_ as soroban_sdk::Event>::publish(self, env); } } @@ -7606,13 +7426,6 @@ impl UsedTupleElement { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x10UsedTupleElement\0\0\0\x01\0\0\0\0\0\0\0\x03val\0\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for UsedTupleElement { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedTupleElement { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -7974,13 +7787,6 @@ impl UsedTupleReturnElement { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x16UsedTupleReturnElement\0\0\0\0\0\x01\0\0\0\0\0\0\0\x03val\0\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for UsedTupleReturnElement { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedTupleReturnElement { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -8334,19 +8140,6 @@ impl ::core::cmp::PartialEq for UsedNonPubStruct { self.val == other.val } } -pub static __SPEC_XDR_TYPE_USEDNONPUBSTRUCT: [u8; 52usize] = UsedNonPubStruct::spec_xdr(); -impl UsedNonPubStruct { - pub const fn spec_xdr() -> [u8; 52usize] { - *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x10UsedNonPubStruct\0\0\0\x01\0\0\0\0\0\0\0\x03val\0\0\0\0\x04" - } -} -impl soroban_sdk::SpecShakingMarker for UsedNonPubStruct { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UsedNonPubStruct { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -8694,17 +8487,6 @@ impl ::core::cmp::PartialEq for UsedNonPubError { true } } -pub static __SPEC_XDR_TYPE_USEDNONPUBERROR: [u8; 52usize] = UsedNonPubError::spec_xdr(); -impl UsedNonPubError { - pub const fn spec_xdr() -> [u8; 52usize] { - *b"\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\x0fUsedNonPubError\0\0\0\0\x01\0\0\0\0\0\0\0\x04Fail\0\0\0\x01" - } -} -impl soroban_sdk::SpecShakingMarker for UsedNonPubError { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl TryFrom for UsedNonPubError { type Error = soroban_sdk::Error; #[inline(always)] @@ -9491,20 +9273,6 @@ mod wasm_imported { } } } - pub static __SPEC_XDR_TYPE_STRUCTA: [u8; 60usize] = StructA::spec_xdr(); - impl StructA { - pub const fn spec_xdr() -> [u8; 60usize] { - *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x07StructA\0\0\0\0\x02\0\0\0\0\0\0\0\x02f1\0\0\0\0\0\x04\0\0\0\0\0\0\0\x02f2\0\0\0\0\0\x01" - } - } - impl soroban_sdk::SpecShakingMarker for StructA { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } - } impl soroban_sdk::TryFromVal for StructA { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -9931,20 +9699,6 @@ mod wasm_imported { } } } - pub static __SPEC_XDR_TYPE_STRUCTB: [u8; 60usize] = StructB::spec_xdr(); - impl StructB { - pub const fn spec_xdr() -> [u8; 60usize] { - *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x07StructB\0\0\0\0\x02\0\0\0\0\0\0\0\x02f1\0\0\0\0\0\x07\0\0\0\0\0\0\0\x02f2\0\0\0\0\0\x10" - } - } - impl soroban_sdk::SpecShakingMarker for StructB { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } - } impl soroban_sdk::TryFromVal for StructB { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -10371,20 +10125,6 @@ mod wasm_imported { } } } - pub static __SPEC_XDR_TYPE_STRUCTC: [u8; 64usize] = StructC::spec_xdr(); - impl StructC { - pub const fn spec_xdr() -> [u8; 64usize] { - *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x07StructC\0\0\0\0\x02\0\0\0\0\0\0\0\x02f1\0\0\0\0\x03\xea\0\0\0\x04\0\0\0\0\0\0\0\x02f2\0\0\0\0\0\x13" - } - } - impl soroban_sdk::SpecShakingMarker for StructC { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - as soroban_sdk::SpecShakingMarker>::spec_shaking_marker(); - ::spec_shaking_marker(); - } - } impl soroban_sdk::TryFromVal for StructC { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -10814,20 +10554,6 @@ mod wasm_imported { } } } - pub static __SPEC_XDR_TYPE_STRUCTTUPLEA: [u8; 64usize] = StructTupleA::spec_xdr(); - impl StructTupleA { - pub const fn spec_xdr() -> [u8; 64usize] { - *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x0cStructTupleA\0\0\0\x02\0\0\0\0\0\0\0\x010\0\0\0\0\0\0\x07\0\0\0\0\0\0\0\x011\0\0\0\0\0\0\x07" - } - } - impl soroban_sdk::SpecShakingMarker for StructTupleA { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } - } impl soroban_sdk::TryFromVal for StructTupleA { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -11219,20 +10945,6 @@ mod wasm_imported { } } } - pub static __SPEC_XDR_TYPE_STRUCTTUPLEB: [u8; 64usize] = StructTupleB::spec_xdr(); - impl StructTupleB { - pub const fn spec_xdr() -> [u8; 64usize] { - *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x0cStructTupleB\0\0\0\x02\0\0\0\0\0\0\0\x010\0\0\0\0\0\0\n\0\0\0\0\0\0\0\x011\0\0\0\0\0\0\n" - } - } - impl soroban_sdk::SpecShakingMarker for StructTupleB { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } - } impl soroban_sdk::TryFromVal for StructTupleB { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -11625,20 +11337,6 @@ mod wasm_imported { } } } - pub static __SPEC_XDR_TYPE_STRUCTTUPLEC: [u8; 64usize] = StructTupleC::spec_xdr(); - impl StructTupleC { - pub const fn spec_xdr() -> [u8; 64usize] { - *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x0cStructTupleC\0\0\0\x02\0\0\0\0\0\0\0\x010\0\0\0\0\0\0\x13\0\0\0\0\0\0\0\x011\0\0\0\0\0\0\x0b" - } - } - impl soroban_sdk::SpecShakingMarker for StructTupleC { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } - } impl soroban_sdk::TryFromVal for StructTupleC { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -12035,17 +11733,6 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } - pub static __SPEC_XDR_TYPE_ENUMA: [u8; 76usize] = EnumA::spec_xdr(); - impl EnumA { - pub const fn spec_xdr() -> [u8; 76usize] { - *b"\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\x05EnumA\0\0\0\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x02V1\0\0\0\0\0\0\0\0\0\0\0\0\0\x02V2\0\0\0\0\0\0\0\0\0\0\0\0\0\x02V3\0\0" - } - } - impl soroban_sdk::SpecShakingMarker for EnumA { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} - } impl soroban_sdk::TryFromVal for EnumA { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -12557,19 +12244,6 @@ mod wasm_imported { } } } - pub static __SPEC_XDR_TYPE_ENUMB: [u8; 96usize] = EnumB::spec_xdr(); - impl EnumB { - pub const fn spec_xdr() -> [u8; 96usize] { - *b"\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\x05EnumB\0\0\0\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x02V1\0\0\0\0\0\x01\0\0\0\0\0\0\0\x02V2\0\0\0\0\0\x01\0\0\0\x07\0\0\0\x01\0\0\0\0\0\0\0\x02V3\0\0\0\0\0\x02\0\0\0\x07\0\0\0\x07" - } - } - impl soroban_sdk::SpecShakingMarker for EnumB { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } - } impl soroban_sdk::TryFromVal for EnumB { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -13197,20 +12871,6 @@ mod wasm_imported { } } } - pub static __SPEC_XDR_TYPE_ENUMC: [u8; 120usize] = EnumC::spec_xdr(); - impl EnumC { - pub const fn spec_xdr() -> [u8; 120usize] { - *b"\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\x05EnumC\0\0\0\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x02V1\0\0\0\0\0\x01\0\0\0\0\0\0\0\x02V2\0\0\0\0\0\x01\0\0\x07\xd0\0\0\0\x07StructA\0\0\0\0\x01\0\0\0\0\0\0\0\x02V3\0\0\0\0\0\x01\0\0\x07\xd0\0\0\0\x0cStructTupleA" - } - } - impl soroban_sdk::SpecShakingMarker for EnumC { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } - } impl soroban_sdk::TryFromVal for EnumC { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -13766,17 +13426,6 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } - pub static __SPEC_XDR_TYPE_ENUMINTA: [u8; 76usize] = EnumIntA::spec_xdr(); - impl EnumIntA { - pub const fn spec_xdr() -> [u8; 76usize] { - *b"\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x08EnumIntA\0\0\0\x03\0\0\0\0\0\0\0\x02V1\0\0\0\0\0\x01\0\0\0\0\0\0\0\x02V2\0\0\0\0\0\x02\0\0\0\0\0\0\0\x02V3\0\0\0\0\0\x03" - } - } - impl soroban_sdk::SpecShakingMarker for EnumIntA { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} - } impl soroban_sdk::TryFromVal for EnumIntA { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -14131,17 +13780,6 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } - pub static __SPEC_XDR_TYPE_ENUMINTB: [u8; 76usize] = EnumIntB::spec_xdr(); - impl EnumIntB { - pub const fn spec_xdr() -> [u8; 76usize] { - *b"\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x08EnumIntB\0\0\0\x03\0\0\0\0\0\0\0\x02V1\0\0\0\0\0\n\0\0\0\0\0\0\0\x02V2\0\0\0\0\0\x14\0\0\0\0\0\0\0\x02V3\0\0\0\0\0\x1e" - } - } - impl soroban_sdk::SpecShakingMarker for EnumIntB { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} - } impl soroban_sdk::TryFromVal for EnumIntB { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -14496,17 +14134,6 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } - pub static __SPEC_XDR_TYPE_ENUMINTC: [u8; 76usize] = EnumIntC::spec_xdr(); - impl EnumIntC { - pub const fn spec_xdr() -> [u8; 76usize] { - *b"\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x08EnumIntC\0\0\0\x03\0\0\0\0\0\0\0\x02V1\0\0\0\0\0d\0\0\0\0\0\0\0\x02V2\0\0\0\0\0\xc8\0\0\0\0\0\0\0\x02V3\0\0\0\0\x01," - } - } - impl soroban_sdk::SpecShakingMarker for EnumIntC { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} - } impl soroban_sdk::TryFromVal for EnumIntC { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -14861,17 +14488,6 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } - pub static __SPEC_XDR_TYPE_ERRORA: [u8; 76usize] = ErrorA::spec_xdr(); - impl ErrorA { - pub const fn spec_xdr() -> [u8; 76usize] { - *b"\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\x06ErrorA\0\0\0\0\0\x03\0\0\0\0\0\0\0\x02E1\0\0\0\0\0\x01\0\0\0\0\0\0\0\x02E2\0\0\0\0\0\x02\0\0\0\0\0\0\0\x02E3\0\0\0\0\0\x03" - } - } - impl soroban_sdk::SpecShakingMarker for ErrorA { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} - } impl TryFrom for ErrorA { type Error = soroban_sdk::Error; #[inline(always)] @@ -15047,17 +14663,6 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } - pub static __SPEC_XDR_TYPE_ERRORB: [u8; 76usize] = ErrorB::spec_xdr(); - impl ErrorB { - pub const fn spec_xdr() -> [u8; 76usize] { - *b"\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\x06ErrorB\0\0\0\0\0\x03\0\0\0\0\0\0\0\x02E1\0\0\0\0\0\n\0\0\0\0\0\0\0\x02E2\0\0\0\0\0\x0b\0\0\0\0\0\0\0\x02E3\0\0\0\0\0\x0c" - } - } - impl soroban_sdk::SpecShakingMarker for ErrorB { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} - } impl TryFrom for ErrorB { type Error = soroban_sdk::Error; #[inline(always)] @@ -15233,17 +14838,6 @@ mod wasm_imported { ::core::cmp::PartialOrd::partial_cmp(&__self_discr, &__arg1_discr) } } - pub static __SPEC_XDR_TYPE_ERRORC: [u8; 76usize] = ErrorC::spec_xdr(); - impl ErrorC { - pub const fn spec_xdr() -> [u8; 76usize] { - *b"\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\x06ErrorC\0\0\0\0\0\x03\0\0\0\0\0\0\0\x02E1\0\0\0\0\0d\0\0\0\0\0\0\0\x02E2\0\0\0\0\0e\0\0\0\0\0\0\0\x02E3\0\0\0\0\0f" - } - } - impl soroban_sdk::SpecShakingMarker for ErrorC { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} - } impl TryFrom for ErrorC { type Error = soroban_sdk::Error; #[inline(always)] @@ -15425,14 +15019,6 @@ mod wasm_imported { *b"\0\0\0\x05\0\0\0\0\0\0\0\0\0\0\0\x06EventA\0\0\0\0\0\x01\0\0\0\x07event_a\0\0\0\0\x02\0\0\0\0\0\0\0\x02f1\0\0\0\0\0\x13\0\0\0\x01\0\0\0\0\0\0\0\x02f2\0\0\0\0\0\x10\0\0\0\0\0\0\0\x02" } } - impl soroban_sdk::SpecShakingMarker for EventA { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } - } impl soroban_sdk::Event for EventA { fn topics(&self, env: &soroban_sdk::Env) -> soroban_sdk::Vec { use soroban_sdk::IntoVal; @@ -15460,7 +15046,6 @@ mod wasm_imported { } impl EventA { pub fn publish(&self, env: &soroban_sdk::Env) { - ::spec_shaking_marker(); <_ as soroban_sdk::Event>::publish(self, env); } } @@ -15545,15 +15130,6 @@ mod wasm_imported { *b"\0\0\0\x05\0\0\0\0\0\0\0\0\0\0\0\x06EventB\0\0\0\0\0\x01\0\0\0\x07event_b\0\0\0\0\x03\0\0\0\0\0\0\0\x02f1\0\0\0\0\0\x13\0\0\0\x01\0\0\0\0\0\0\0\x02f2\0\0\0\0\0\x13\0\0\0\x01\0\0\0\0\0\0\0\x02f3\0\0\0\0\0\x0b\0\0\0\0\0\0\0\x02" } } - impl soroban_sdk::SpecShakingMarker for EventB { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } - } impl soroban_sdk::Event for EventB { fn topics(&self, env: &soroban_sdk::Env) -> soroban_sdk::Vec { use soroban_sdk::IntoVal; @@ -15585,7 +15161,6 @@ mod wasm_imported { } impl EventB { pub fn publish(&self, env: &soroban_sdk::Env) { - ::spec_shaking_marker(); <_ as soroban_sdk::Event>::publish(self, env); } } @@ -15669,15 +15244,6 @@ mod wasm_imported { *b"\0\0\0\x05\0\0\0\0\0\0\0\0\0\0\0\x06EventC\0\0\0\0\0\x01\0\0\0\x07event_c\0\0\0\0\x03\0\0\0\0\0\0\0\x02f1\0\0\0\0\0\x11\0\0\0\x01\0\0\0\0\0\0\0\x02f2\0\0\0\0\0\x07\0\0\0\0\0\0\0\0\0\0\0\x02f3\0\0\0\0\0\x07\0\0\0\0\0\0\0\x02" } } - impl soroban_sdk::SpecShakingMarker for EventC { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } - } impl soroban_sdk::Event for EventC { fn topics(&self, env: &soroban_sdk::Env) -> soroban_sdk::Vec { use soroban_sdk::IntoVal; @@ -15705,7 +15271,6 @@ mod wasm_imported { } impl EventC { pub fn publish(&self, env: &soroban_sdk::Env) { - ::spec_shaking_marker(); <_ as soroban_sdk::Event>::publish(self, env); } } @@ -15753,13 +15318,6 @@ impl UnusedStruct { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x0cUnusedStruct\0\0\0\x01\0\0\0\0\0\0\0\x01x\0\0\0\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for UnusedStruct { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UnusedStruct { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -16124,13 +15682,6 @@ impl UnusedEnum { *b"\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\nUnusedEnum\0\0\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\x01A\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\x01B\0\0\0\0\0\0\x01\0\0\0\x07" } } -impl soroban_sdk::SpecShakingMarker for UnusedEnum { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UnusedEnum { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -16594,11 +16145,6 @@ impl UnusedIntEnum { *b"\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\rUnusedIntEnum\0\0\0\0\0\0\x02\0\0\0\0\0\0\0\x02U1\0\0\0\0\0\x01\0\0\0\0\0\0\0\x02U2\0\0\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for UnusedIntEnum { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl soroban_sdk::TryFromVal for UnusedIntEnum { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -16928,14 +16474,6 @@ impl UnusedEvent { *b"\0\0\0\x05\0\0\0\0\0\0\0\0\0\0\0\x0bUnusedEvent\0\0\0\0\x01\0\0\0\x0cunused_event\0\0\0\x02\0\0\0\0\0\0\0\x04kind\0\0\0\x11\0\0\0\x01\0\0\0\0\0\0\0\x04data\0\0\0\x04\0\0\0\0\0\0\0\x02" } } -impl soroban_sdk::SpecShakingMarker for UnusedEvent { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::Event for UnusedEvent { fn topics(&self, env: &soroban_sdk::Env) -> soroban_sdk::Vec { use soroban_sdk::IntoVal; @@ -16956,7 +16494,6 @@ impl soroban_sdk::Event for UnusedEvent { } impl UnusedEvent { pub fn publish(&self, env: &soroban_sdk::Env) { - ::spec_shaking_marker(); <_ as soroban_sdk::Event>::publish(self, env); } } @@ -17009,13 +16546,6 @@ impl UnusedNonContractFnParam { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x18UnusedNonContractFnParam\0\0\0\x01\0\0\0\0\0\0\0\x01x\0\0\0\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for UnusedNonContractFnParam { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UnusedNonContractFnParam { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -17383,13 +16913,6 @@ impl UnusedNonContractFnReturn { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x19UnusedNonContractFnReturn\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\x01x\0\0\0\0\0\0\x04" } } -impl soroban_sdk::SpecShakingMarker for UnusedNonContractFnReturn { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UnusedNonContractFnReturn { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -17745,19 +17268,6 @@ impl ::core::cmp::PartialEq for UnusedNonPubStruct { self.x == other.x } } -pub static __SPEC_XDR_TYPE_UNUSEDNONPUBSTRUCT: [u8; 56usize] = UnusedNonPubStruct::spec_xdr(); -impl UnusedNonPubStruct { - pub const fn spec_xdr() -> [u8; 56usize] { - *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x12UnusedNonPubStruct\0\0\0\0\0\x01\0\0\0\0\0\0\0\x01x\0\0\0\0\0\0\x04" - } -} -impl soroban_sdk::SpecShakingMarker for UnusedNonPubStruct { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UnusedNonPubStruct { type Error = soroban_sdk::ConversionError; fn try_from_val( @@ -18105,17 +17615,6 @@ impl ::core::cmp::PartialEq for UnusedNonPubError { true } } -pub static __SPEC_XDR_TYPE_UNUSEDNONPUBERROR: [u8; 56usize] = UnusedNonPubError::spec_xdr(); -impl UnusedNonPubError { - pub const fn spec_xdr() -> [u8; 56usize] { - *b"\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\x11UnusedNonPubError\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\x03Bad\0\0\0\0\x01" - } -} -impl soroban_sdk::SpecShakingMarker for UnusedNonPubError { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl TryFrom for UnusedNonPubError { type Error = soroban_sdk::Error; #[inline(always)] @@ -20991,6 +20490,7 @@ mod test { use std::collections::HashSet; use std::vec::Vec; const WASM: &[u8] = b"\x00asm\x01\x00\x00\x00\x01@\n`\x02~~\x01~`\x01~\x01~`\x03~~~\x01~`\x04~~~~\x01~`\x00\x01~`\x02\x7f\x7f\x01~`\x04\x7f\x7f\x7f\x7f\x01~`\x05~\x7f\x7f\x7f\x7f\x00`\x03\x7f\x7f\x7f\x00`\x01\x7f\x01~\x02+\x07\x01x\x011\x00\x00\x01i\x012\x00\x01\x01v\x01h\x00\x02\x01v\x01g\x00\x00\x01b\x01j\x00\x00\x01m\x019\x00\x02\x01m\x01a\x00\x03\x03\x1b\x1a\x04\x05\x00\x06\x04\x04\x04\x04\x04\x04\x04\x01\x07\x01\x01\x04\x01\x00\x04\x04\x08\t\x01\x04\x01\x01\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\xbe\x85\xc0\x00\x0b\x7f\x00A\xe0\x85\xc0\x00\x0b\x7f\x00A\xe0\x85\xc0\x00\x0b\x07\xea\x02\x17\x06memory\x02\x00\x11publish_data_type\x00\x07\x13publish_nested_data\x00\x0b\x14publish_nested_topic\x00\x0c\x11publish_ref_event\x00\x0e\x0epublish_simple\x00\x0f\x12publish_topic_type\x00\x10\nwith_error\x00\x11\x0fwith_lib_struct\x00\x12\x08with_map\x00\x14\x0cwith_non_pub\x00\x15\x12with_non_pub_error\x00\x16\x0bwith_option\x00\x17\nwith_param\x00\x18\x0bwith_result\x00\x19\x0bwith_return\x00\x1a\nwith_tuple\x00\x1d\x11with_tuple_return\x00\x1e\x08with_vec\x00\x1f\x12with_wasm_imported\x00 \x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\xa6\x17\x1a\xae\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A k\"\x00$\x80\x80\x80\x80\x00A\x8c\x84\xc0\x80\x00A\x06\x10\x88\x80\x80\x80\x00!\x01A\x00-\x00\xa8\x81\xc0\x80\x00\x1aA\x00-\x00\xa6\x82\xc0\x80\x00\x1aA\xd4\x84\xc0\x80\x00A\x19\x10\x88\x80\x80\x80\x00 \x01\x10\x89\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80 7\x03\x18 \x00B\x84\x80\x80\x80\x107\x03\x10 \x00A\xe4\x83\xc0\x80\x00A\x02 \x00A\x10jA\x02\x10\x8a\x80\x80\x80\x007\x03\x08 \x01A\xb8\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x8a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A j$\x80\x80\x80\x80\x00B\x02\x0bE\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00 \x01\x10\x9b\x80\x80\x80\x00\x02@ \x02(\x02\x00A\x01G\r\x00\x00\x0b \x02)\x03\x08!\x03 \x02A\x10j$\x80\x80\x80\x80\x00 \x03\x0b\x92\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00 \x02 \x017\x03\x08 \x02 \x007\x03\x00A\x00!\x03\x03~\x02@ \x03A\x10G\r\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02A\x10j \x03j \x02 \x03j)\x03\x007\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x02A\x10j\x10\x9c\x80\x80\x80\x00!\x01 \x02A j$\x80\x80\x80\x80\x00 \x01\x0f\x0b \x02A\x10j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b.\x00\x02@ \x01 \x03F\r\x00\x00\x0b \x00\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x85\x80\x80\x80\x00\x0b\xc5\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\xa5\x83\xc0\x80\x00A\x06\x10\x88\x80\x80\x80\x00!\x01A\x00-\x00\xd2\x81\xc0\x80\x00\x1aA\x00-\x00\xe0\x81\xc0\x80\x00\x1aA\x00-\x00\xde\x82\xc0\x80\x00\x1aA\x87\x85\xc0\x80\x00A\x1b\x10\x88\x80\x80\x80\x00 \x01\x10\x89\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80\xa0\x057\x03\x08 \x00A\xc0\x83\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x8a\x80\x80\x80\x007\x03\x00 \x00A\xfc\x83\xc0\x80\x00A\x01 \x00A\x01\x10\x8a\x80\x80\x80\x007\x03\x08 \x01A\xb8\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x8a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\xbd\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x8a\x82\xc0\x80\x00\x1aA\x00-\x00\x98\x82\xc0\x80\x00\x1aA\x00-\x00\xec\x82\xc0\x80\x00\x1aA\xa2\x85\xc0\x80\x00A\x1c\x10\x88\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80\xa0\x057\x03\x08 \x00A\xc0\x83\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x8a\x80\x80\x80\x007\x03\x00 \x01A\xfc\x83\xc0\x80\x00A\x01 \x00A\x01\x10\x8a\x80\x80\x80\x00\x10\x89\x80\x80\x80\x00!\x01 \x00\x10\x8d\x80\x80\x80\x007\x03\x08 \x01A\x98\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x8a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x06\x00B\x8b\xc8\x01\x0b\xc3\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x8c\x81\xc0\x80\x00\x1aA\x00-\x00\xfe\x80\xc0\x80\x00\x1aA\x00-\x00\xd4\x80\xc0\x80\x00\x1aA\x00-\x00\xb6\x81\xc0\x80\x00\x1aA\xc0\x84\xc0\x80\x00A\x14\x10\x88\x80\x80\x80\x00B\x84\x80\x80\x80\x10\x10\x89\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80\xb0\x0c7\x03\x08 \x00A\xc0\x83\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x8a\x80\x80\x80\x007\x03\x00 \x00A\xd8\x83\xc0\x80\x00A\x01 \x00A\x01\x10\x8a\x80\x80\x80\x007\x03\x08 \x01A\xb8\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x8a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x7f\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x84\x84\xc0\x80\x00A\x08\x10\x88\x80\x80\x80\x00!\x01A\x00-\x00\xaa\x80\xc0\x80\x00\x1aA\xa0\x84\xc0\x80\x00A\x11\x10\x88\x80\x80\x80\x00 \x01\x10\x89\x80\x80\x80\x00!\x01 \x00\x10\x8d\x80\x80\x80\x007\x03\x08 \x01A\x98\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x8a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b}\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\xee\x81\xc0\x80\x00\x1aA\x00-\x00\xb4\x82\xc0\x80\x00\x1aA\xed\x84\xc0\x80\x00A\x1a\x10\x88\x80\x80\x80\x00B\x84\x80\x80\x80\x10\x10\x89\x80\x80\x80\x00!\x01 \x00\x10\x8d\x80\x80\x80\x007\x03\x08 \x01A\x98\x84\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x8a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x13\x00A\x00-\x00\x80\x80\xc0\x80\x00\x1aB\x84\x80\x80\x80\xa0\x05\x0b\x8d\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00!\x02A\x00-\x00\xbe\x85\xc0\x80\x00\x1a\x02@\x03@ \x02A\x10F\r\x01 \x01 \x02jB\x027\x03\x00 \x02A\x08j!\x02\x0c\x00\x0b\x0b\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xd0\x85\xc0\x80\x00A\x02 \x01A\x02\x10\x93\x80\x80\x80\x00 \x011\x00\x00B\xcb\x00R\r\x00 \x011\x00\x08B\xcd\x00Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0b1\x00\x02@ \x02 \x04F\r\x00\x00\x0b \x00 \x01\xadB \x86B\x04\x84 \x03\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x86\x80\x80\x80\x00\x1a\x0b(\x00A\x00-\x00\xfa\x82\xc0\x80\x00\x1aA\x00-\x00\x88\x83\xc0\x80\x00\x1a\x02@ \x00B\xff\x01\x83B\xcc\x00Q\r\x00\x00\x0bB\x02\x0bg\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\xe2\x80\xc0\x80\x00\x1a \x01B\x027\x03\x08\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xc0\x83\xc0\x80\x00A\x01 \x01A\x08jA\x01\x10\x93\x80\x80\x80\x00 \x011\x00\x08B\x04Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x12\x00A\x00-\x00\xb8\x80\xc0\x80\x00\x1aB\x84\x80\x80\x80\x10\x0br\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00-\x00\xc4\x81\xc0\x80\x00\x1a\x02@ \x00B\x02Q\r\x00 \x01B\x027\x03\x08\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xcc\x83\xc0\x80\x00A\x01 \x01A\x08jA\x01\x10\x93\x80\x80\x80\x00 \x01)\x03\x08B\xff\x01\x83B\x04Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x8a\x02\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00A\x00!\x03A\x00-\x00\xfc\x81\xc0\x80\x00\x1aA\x00-\x00\xc6\x80\xc0\x80\x00\x1a\x02@\x03@ \x03A\x10F\r\x01 \x02A\x08j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xac\x83\xc0\x80\x00A\x02 \x02A\x08jA\x02\x10\x93\x80\x80\x80\x00 \x021\x00\x08B\x04R\r\x00 \x02B\x027\x03\x18 \x02)\x03\x10\"\x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xc0\x83\xc0\x80\x00A\x01 \x02A\x18jA\x01\x10\x93\x80\x80\x80\x00\x02@ \x02)\x03\x18\"\x00\xa7A\xff\x01q\"\x03A\x07F\r\x00 \x03A\xc1\x00G\r\x01 \x00\x10\x81\x80\x80\x80\x00\x1a\x0bA\x00-\x00\xf0\x80\xc0\x80\x00\x1a \x01B\xff\x01\x83B\x04R\r\x00 \x01B \x88\xa7A}jA}K\r\x01\x0b\x00\x0b \x02A j$\x80\x80\x80\x80\x00B\x02\x0bZ\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x96\x83\xc0\x80\x00\x1aA\x00-\x00\x80\x80\xc0\x80\x00\x1a \x00B\x84\x80\x80\x80\x107\x03\x08A\xcc\x83\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x8a\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0bo\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\x8e\x80\xc0\x80\x00\x1a \x00A\xd4\x83\xc0\x80\x00A\x01\x10\x9b\x80\x80\x80\x00\x02@ \x00(\x02\x00A\x01G\r\x00\x00\x0b \x00)\x03\x08!\x01 \x00B\x84\x80\x80\x80\x107\x03\x08 \x00 \x017\x03\x00 \x00\x10\x9c\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0b\xdb\x01\x02\x01~\x04\x7f\x02@\x02@ \x02A\tK\r\x00B\x00!\x03 \x02!\x04 \x01!\x05\x03@\x02@ \x04\r\x00 \x03B\x08\x86B\x0e\x84!\x03\x0c\x03\x0bA\x01!\x06\x02@ \x05-\x00\x00\"\x07A\xdf\x00F\r\x00\x02@\x02@ \x07APjA\xff\x01qA\nI\r\x00 \x07A\xbf\x7fjA\xff\x01qA\x1aI\r\x01 \x07A\x9f\x7fjA\xff\x01qA\x1aO\r\x04 \x07AEj!\x06\x0c\x02\x0b \x07ARj!\x06\x0c\x01\x0b \x07AKj!\x06\x0b \x03B\x06\x86 \x06\xadB\xff\x01\x83\x84!\x03 \x04A\x7fj!\x04 \x05A\x01j!\x05\x0c\x00\x0b\x0b \x01\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x84\x80\x80\x80\x00!\x03\x0b \x00B\x007\x03\x00 \x00 \x037\x03\x08\x0b\x17\x00 \x00\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x83\x80\x80\x80\x00\x0b\xc4\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x01$\x80\x80\x80\x80\x00A\x00!\x02A\x00-\x00\x9a\x81\xc0\x80\x00\x1a\x02@\x02@ \x00B\xff\x01\x83B\xcb\x00R\r\x00\x02@\x03@ \x02A\x10F\r\x01 \x01A\x08j \x02jB\x027\x03\x00 \x02A\x08j!\x02\x0c\x00\x0b\x0b \x00 \x01A\x08j\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x82\x80\x80\x80\x00\x1a \x01B\x027\x03\x18 \x01)\x03\x08\"\x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xc0\x83\xc0\x80\x00A\x01 \x01A\x18jA\x01\x10\x93\x80\x80\x80\x00 \x011\x00\x18B\x04R\r\x00 \x011\x00\x10B\x04Q\r\x01\x0b\x00\x0b \x01A j$\x80\x80\x80\x80\x00B\x02\x0bo\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A k\"\x00$\x80\x80\x80\x80\x00A\x00-\x00\xc2\x82\xc0\x80\x00\x1a \x00B\x84\x80\x80\x80\x107\x03\x18A\xc0\x83\xc0\x80\x00A\x01 \x00A\x18jA\x01\x10\x8a\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80 7\x03\x10 \x00 \x017\x03\x08 \x00A\x08j\x10\x9c\x80\x80\x80\x00!\x01 \x00A j$\x80\x80\x80\x80\x00 \x01\x0b\x1e\x00A\x00-\x00\x9c\x80\xc0\x80\x00\x1a\x02@ \x00B\xff\x01\x83B\xcb\x00Q\r\x00\x00\x0bB\x02\x0b\x8d\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00!\x02A\x00-\x00\xd0\x82\xc0\x80\x00\x1a\x02@\x03@ \x02A\x10F\r\x01 \x01 \x02jB\x027\x03\x00 \x02A\x08j!\x02\x0c\x00\x0b\x0b\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xd0\x85\xc0\x80\x00A\x02 \x01A\x02\x10\x93\x80\x80\x80\x00 \x011\x00\x00B\x04R\r\x00 \x01)\x03\x08B\xfe\x01\x83P\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x0b\xea\x05\x01\x00A\x80\x80\xc0\x00\x0b\xe0\x05SpEcV1Hh\xdc\xaaa\x8d\xf7\rSpEcV1\xe7\xcf\x9b1n\x15\x13\xfeSpEcV1\xe2\x01y\xc9\x9a\xf8\xedtSpEcV1v1\x0eP\xa9C\xc7*SpEcV1\xa9<\xd8+\xb7\xa7\r\x17SpEcV1X\x03\xf6t\xc7\xd0\x01\"SpEcV1\'\xbd_A\r\x9a\x89\x02SpEcV1p\x8c\x0fN!\x082\xd8SpEcV1\xc2\xf4N\xbf\xebqvpSpEcV1K\xdf\'8m/\xe8\x1dSpEcV1@\xb9LO\xf9\xd1\xe8\xe2SpEcV1\xde\x1dMa\x01\xec\xb0ASpEcV1\xc2 \x1b\xdc\xc8gxZSpEcV1[Q+\xe9\xde\xd5\xf2>SpEcV1\xb3/\x97\xd5\x06\xbd3BSpEcV1\x0c\xf0\xf6w\xfd\x1a\x1b\x94SpEcV1\'\xf2\xa2\xb9\xd0)\xc0uSpEcV1\xf5\xd4\x9b\xa3\xccI\x13\xf7SpEcV1\x84\x08Y\xae\xa0\xf128SpEcV16\x83?\xf0\xcdW\xb1/SpEcV1\x94\xc7w/_\xebXcSpEcV1q\xa3z;6\xa6R\x01SpEcV1q^\xe2&\x9di\x9d\x0eSpEcV1Y\xa66\xb3\xecxE\x13SpEcV1\xb6\x1c\xfd\xdfhY-dSpEcV1 \xfbl\x04B\x82\xc0\xb4SpEcV1\xe3\xf2\x9b5%a\xfb\xd6SpEcV1[\xf4R\xdf\xdd\xb4\xb0\xbcSpEcV1\xaaX8\xde\xef\xbb6%SpEcV1k\xe4zxB\xd1+\x02anested\x00\xa4\x01\x10\x00\x01\x00\x00\x00\xa5\x01\x10\x00\x06\x00\x00\x00val\x00\xbc\x01\x10\x00\x03\x00\x00\x00data\xc8\x01\x10\x00\x04\x00\x00\x00A\x00\x00\x00\xa5\x01\x10\x00\x06\x00\x00\x00xy\x00\x00\xe0\x01\x10\x00\x01\x00\x00\x00\xe1\x01\x10\x00\x01\x00\x00\x00inner\x00\x00\x00\xf4\x01\x10\x00\x05\x00\x00\x00transfercoordsamount\x12\x02\x10\x00\x06\x00\x00\x00used_event_simplepayload1\x02\x10\x00\x07\x00\x00\x00used_event_with_refsused_event_with_data_typeused_event_with_topic_typeused_event_with_nested_dataused_event_with_nested_topicSpEcV1\xa3\x16\n\x8f\xc9\x92\xd2\x11f1f2\xcc\x02\x10\x00\x02\x00\x00\x00\xce\x02\x10\x00\x02\x00\x00\x00\x00\xaf6\x0econtractspecv0\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05EnumA\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05EnumB\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05EnumC\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x07StructA\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x0cStructTupleA\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06ErrorA\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06ErrorB\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06ErrorC\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00e\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00f\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventB\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_b\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventC\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_c\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07StructA\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07StructB\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07StructC\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x03\xea\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08EnumIntA\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08EnumIntB\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08EnumIntC\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x01,\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStructTupleA\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStructTupleB\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStructTupleC\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08with_map\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01m\x00\x00\x00\x00\x00\x03\xec\x00\x00\x07\xd0\x00\x00\x00\nUsedMapKey\x00\x00\x00\x00\x07\xd0\x00\x00\x00\nUsedMapVal\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08with_vec\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01v\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\x0eUsedVecElement\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nUnusedEnum\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01A\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01B\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nUsedMapKey\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02K1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02K2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nUsedMapVal\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01v\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nwith_error\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00\rUsedErrorEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nwith_param\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x0fUsedParamStruct\x00\x00\x00\x00\x00\x00\x00\x00\x02ie\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x10UsedParamIntEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nwith_tuple\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01t\x00\x00\x00\x00\x00\x03\xed\x00\x00\x00\x02\x00\x00\x07\xd0\x00\x00\x00\x10UsedTupleElement\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bUnusedEvent\x00\x00\x00\x00\x01\x00\x00\x00\x0cunused_event\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cUnusedStruct\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cUsedResultOk\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bwith_option\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01o\x00\x00\x00\x00\x00\x03\xe8\x00\x00\x07\xd0\x00\x00\x00\x11UsedOptionElement\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bwith_result\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x07\xd0\x00\x00\x00\x0cUsedResultOk\x00\x00\x07\xd0\x00\x00\x00\rUsedErrorEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bwith_return\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x0eUsedReturnEnum\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\rUnusedIntEnum\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02U1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02U2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\rUsedErrorEnum\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x08NotFound\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07Invalid\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cwith_non_pub\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x10UsedNonPubStruct\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0eUsedReturnEnum\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01A\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01B\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0eUsedVecElement\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fUsedNonPubError\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Fail\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fUsedParamStruct\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x06nested\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x12UsedNestedInStruct\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fUsedRefDataType\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06nested\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x10UsedRefDataInner\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0epublish_simple\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fUsedEventSimple\x00\x00\x00\x00\x01\x00\x00\x00\x11used_event_simple\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06amount\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10UsedNonPubStruct\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10UsedParamIntEnum\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01X\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01Y\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10UsedRefDataInner\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10UsedRefTopicType\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04Send\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Recv\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10UsedTupleElement\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fwith_lib_struct\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x07StructC\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11UnusedNonPubError\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03Bad\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11UsedEventDataType\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x01y\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11UsedOptionElement\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11UsedEventWithRefs\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x14used_event_with_refs\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x07\xd0\x00\x00\x00\x10UsedRefTopicType\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07payload\x00\x00\x00\x07\xd0\x00\x00\x00\x0fUsedRefDataType\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12UnusedNonPubStruct\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12UsedEventDataInner\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12UsedEventDataOuter\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05inner\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x12UsedEventDataInner\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12UsedEventTopicType\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x08Transfer\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Mint\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12UsedNestedInStruct\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11publish_data_type\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11publish_ref_event\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11with_tuple_return\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xed\x00\x00\x00\x02\x00\x00\x07\xd0\x00\x00\x00\x16UsedTupleReturnElement\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13UsedEventTopicInner\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13UsedEventTopicOuter\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05inner\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x13UsedEventTopicInner\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12publish_topic_type\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12with_non_pub_error\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00\x0fUsedNonPubError\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12with_wasm_imported\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x07StructA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13publish_nested_data\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14publish_nested_topic\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15UsedEventWithDataType\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x19used_event_with_data_type\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07payload\x00\x00\x00\x07\xd0\x00\x00\x00\x11UsedEventDataType\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16UsedTupleReturnElement\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16UsedEventWithTopicType\x00\x00\x00\x00\x00\x01\x00\x00\x00\x1aused_event_with_topic_type\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x07\xd0\x00\x00\x00\x12UsedEventTopicType\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06amount\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17UsedEventWithNestedData\x00\x00\x00\x00\x01\x00\x00\x00\x1bused_event_with_nested_data\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07payload\x00\x00\x00\x07\xd0\x00\x00\x00\x12UsedEventDataOuter\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18UnusedNonContractFnParam\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18UsedEventWithNestedTopic\x00\x00\x00\x01\x00\x00\x00\x1cused_event_with_nested_topic\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04info\x00\x00\x07\xd0\x00\x00\x00\x13UsedEventTopicOuter\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06amount\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19UnusedNonContractFnReturn\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05EnumA\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05EnumB\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05EnumC\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x07StructA\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x0cStructTupleA\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06ErrorA\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06ErrorB\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06ErrorC\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00e\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00f\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventB\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_b\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventC\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_c\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07StructA\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07StructB\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07StructC\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x03\xea\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08EnumIntA\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08EnumIntB\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08EnumIntC\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x01,\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStructTupleA\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStructTupleB\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStructTupleC\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x0b\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x00\x00\x00\x00O\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12rssdk_spec_shaking\x00\x00\x00\x00\x00\x012\x00\x00\x00"; + const WASM_NO_ENV: &[u8] = b"\x00asm\x01\x00\x00\x00\x01@\n`\x02~~\x01~`\x01~\x01~`\x03~~~\x01~`\x04~~~~\x01~`\x00\x01~`\x02\x7f\x7f\x01~`\x04\x7f\x7f\x7f\x7f\x01~`\x05~\x7f\x7f\x7f\x7f\x00`\x03\x7f\x7f\x7f\x00`\x01\x7f\x01~\x02+\x07\x01x\x011\x00\x00\x01i\x012\x00\x01\x01v\x01h\x00\x02\x01v\x01g\x00\x00\x01b\x01j\x00\x00\x01m\x019\x00\x02\x01m\x01a\x00\x03\x03\x1b\x1a\x04\x05\x00\x06\x04\x04\x04\x04\x04\x04\x04\x01\x07\x01\x01\x04\x01\x00\x04\x04\x08\t\x01\x04\x01\x01\x05\x03\x01\x00\x11\x06!\x04\x7f\x01A\x80\x80\xc0\x00\x0b\x7f\x00A\x9a\x82\xc0\x00\x0b\x7f\x00A\xb0\x82\xc0\x00\x0b\x7f\x00A\xb0\x82\xc0\x00\x0b\x07\xea\x02\x17\x06memory\x02\x00\x11publish_data_type\x00\x07\x13publish_nested_data\x00\x0b\x14publish_nested_topic\x00\x0c\x11publish_ref_event\x00\x0e\x0epublish_simple\x00\x0f\x12publish_topic_type\x00\x10\nwith_error\x00\x11\x0fwith_lib_struct\x00\x12\x08with_map\x00\x14\x0cwith_non_pub\x00\x15\x12with_non_pub_error\x00\x16\x0bwith_option\x00\x17\nwith_param\x00\x18\x0bwith_result\x00\x19\x0bwith_return\x00\x1a\nwith_tuple\x00\x1d\x11with_tuple_return\x00\x1e\x08with_vec\x00\x1f\x12with_wasm_imported\x00 \x01_\x03\x01\n__data_end\x03\x02\x0b__heap_base\x03\x03\n\xe6\x14\x1a\x9a\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A k\"\x00$\x80\x80\x80\x80\x00A\xe8\x80\xc0\x80\x00A\x06\x10\x88\x80\x80\x80\x00!\x01A\xb0\x81\xc0\x80\x00A\x19\x10\x88\x80\x80\x80\x00 \x01\x10\x89\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80 7\x03\x18 \x00B\x84\x80\x80\x80\x107\x03\x10 \x00A\xc0\x80\xc0\x80\x00A\x02 \x00A\x10jA\x02\x10\x8a\x80\x80\x80\x007\x03\x08 \x01A\x94\x81\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x8a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A j$\x80\x80\x80\x80\x00B\x02\x0bE\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x02$\x80\x80\x80\x80\x00 \x02 \x00 \x01\x10\x9b\x80\x80\x80\x00\x02@ \x02(\x02\x00A\x01G\r\x00\x00\x0b \x02)\x03\x08!\x03 \x02A\x10j$\x80\x80\x80\x80\x00 \x03\x0b\x92\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00 \x02 \x017\x03\x08 \x02 \x007\x03\x00A\x00!\x03\x03~\x02@ \x03A\x10G\r\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02A\x10j \x03j \x02 \x03j)\x03\x007\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b \x02A\x10j\x10\x9c\x80\x80\x80\x00!\x01 \x02A j$\x80\x80\x80\x80\x00 \x01\x0f\x0b \x02A\x10j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b.\x00\x02@ \x01 \x03F\r\x00\x00\x0b \x00\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84 \x01\xadB \x86B\x04\x84\x10\x85\x80\x80\x80\x00\x0b\xa7\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x81\x80\xc0\x80\x00A\x06\x10\x88\x80\x80\x80\x00!\x01A\xe3\x81\xc0\x80\x00A\x1b\x10\x88\x80\x80\x80\x00 \x01\x10\x89\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80\xa0\x057\x03\x08 \x00A\x9c\x80\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x8a\x80\x80\x80\x007\x03\x00 \x00A\xd8\x80\xc0\x80\x00A\x01 \x00A\x01\x10\x8a\x80\x80\x80\x007\x03\x08 \x01A\x94\x81\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x8a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x9f\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\xfe\x81\xc0\x80\x00A\x1c\x10\x88\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80\xa0\x057\x03\x08 \x00A\x9c\x80\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x8a\x80\x80\x80\x007\x03\x00 \x01A\xd8\x80\xc0\x80\x00A\x01 \x00A\x01\x10\x8a\x80\x80\x80\x00\x10\x89\x80\x80\x80\x00!\x01 \x00\x10\x8d\x80\x80\x80\x007\x03\x08 \x01A\xf4\x80\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x8a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x06\x00B\x8b\xc8\x01\x0b\x9b\x01\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\x9c\x81\xc0\x80\x00A\x14\x10\x88\x80\x80\x80\x00B\x84\x80\x80\x80\x10\x10\x89\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80\xb0\x0c7\x03\x08 \x00A\x9c\x80\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x8a\x80\x80\x80\x007\x03\x00 \x00A\xb4\x80\xc0\x80\x00A\x01 \x00A\x01\x10\x8a\x80\x80\x80\x007\x03\x08 \x01A\x94\x81\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x8a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0bu\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\xe0\x80\xc0\x80\x00A\x08\x10\x88\x80\x80\x80\x00!\x01A\xfc\x80\xc0\x80\x00A\x11\x10\x88\x80\x80\x80\x00 \x01\x10\x89\x80\x80\x80\x00!\x01 \x00\x10\x8d\x80\x80\x80\x007\x03\x08 \x01A\xf4\x80\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x8a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0bi\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00A\xc9\x81\xc0\x80\x00A\x1a\x10\x88\x80\x80\x80\x00B\x84\x80\x80\x80\x10\x10\x89\x80\x80\x80\x00!\x01 \x00\x10\x8d\x80\x80\x80\x007\x03\x08 \x01A\xf4\x80\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x8a\x80\x80\x80\x00\x10\x80\x80\x80\x80\x00\x1a \x00A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\t\x00B\x84\x80\x80\x80\xa0\x05\x0b\x83\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00!\x02\x02@\x03@ \x02A\x10F\r\x01 \x01 \x02jB\x027\x03\x00 \x02A\x08j!\x02\x0c\x00\x0b\x0b\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa0\x82\xc0\x80\x00A\x02 \x01A\x02\x10\x93\x80\x80\x80\x00 \x011\x00\x00B\xcb\x00R\r\x00 \x011\x00\x08B\xcd\x00Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0b1\x00\x02@ \x02 \x04F\r\x00\x00\x0b \x00 \x01\xadB \x86B\x04\x84 \x03\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x86\x80\x80\x80\x00\x1a\x0b\x14\x00\x02@ \x00B\xff\x01\x83B\xcc\x00Q\r\x00\x00\x0bB\x02\x0b]\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00 \x01B\x027\x03\x08\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\x9c\x80\xc0\x80\x00A\x01 \x01A\x08jA\x01\x10\x93\x80\x80\x80\x00 \x011\x00\x08B\x04Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x08\x00B\x84\x80\x80\x80\x10\x0bh\x01\x01\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00\x02@ \x00B\x02Q\r\x00 \x01B\x027\x03\x08\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa8\x80\xc0\x80\x00A\x01 \x01A\x08jA\x01\x10\x93\x80\x80\x80\x00 \x01)\x03\x08B\xff\x01\x83B\x04Q\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\xec\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x02$\x80\x80\x80\x80\x00A\x00!\x03\x02@\x03@ \x03A\x10F\r\x01 \x02A\x08j \x03jB\x027\x03\x00 \x03A\x08j!\x03\x0c\x00\x0b\x0b\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\x88\x80\xc0\x80\x00A\x02 \x02A\x08jA\x02\x10\x93\x80\x80\x80\x00 \x021\x00\x08B\x04R\r\x00 \x02B\x027\x03\x18 \x02)\x03\x10\"\x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\x9c\x80\xc0\x80\x00A\x01 \x02A\x18jA\x01\x10\x93\x80\x80\x80\x00\x02@ \x02)\x03\x18\"\x00\xa7A\xff\x01q\"\x03A\x07F\r\x00 \x03A\xc1\x00G\r\x01 \x00\x10\x81\x80\x80\x80\x00\x1a\x0b \x01B\xff\x01\x83B\x04R\r\x00 \x01B \x88\xa7A}jA}K\r\x01\x0b\x00\x0b \x02A j$\x80\x80\x80\x80\x00B\x02\x0bF\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00 \x00B\x84\x80\x80\x80\x107\x03\x08A\xa8\x80\xc0\x80\x00A\x01 \x00A\x08jA\x01\x10\x8a\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0be\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A\x10k\"\x00$\x80\x80\x80\x80\x00 \x00A\xb0\x80\xc0\x80\x00A\x01\x10\x9b\x80\x80\x80\x00\x02@ \x00(\x02\x00A\x01G\r\x00\x00\x0b \x00)\x03\x08!\x01 \x00B\x84\x80\x80\x80\x107\x03\x08 \x00 \x017\x03\x00 \x00\x10\x9c\x80\x80\x80\x00!\x01 \x00A\x10j$\x80\x80\x80\x80\x00 \x01\x0b\xdb\x01\x02\x01~\x04\x7f\x02@\x02@ \x02A\tK\r\x00B\x00!\x03 \x02!\x04 \x01!\x05\x03@\x02@ \x04\r\x00 \x03B\x08\x86B\x0e\x84!\x03\x0c\x03\x0bA\x01!\x06\x02@ \x05-\x00\x00\"\x07A\xdf\x00F\r\x00\x02@\x02@ \x07APjA\xff\x01qA\nI\r\x00 \x07A\xbf\x7fjA\xff\x01qA\x1aI\r\x01 \x07A\x9f\x7fjA\xff\x01qA\x1aO\r\x04 \x07AEj!\x06\x0c\x02\x0b \x07ARj!\x06\x0c\x01\x0b \x07AKj!\x06\x0b \x03B\x06\x86 \x06\xadB\xff\x01\x83\x84!\x03 \x04A\x7fj!\x04 \x05A\x01j!\x05\x0c\x00\x0b\x0b \x01\xadB \x86B\x04\x84 \x02\xadB \x86B\x04\x84\x10\x84\x80\x80\x80\x00!\x03\x0b \x00B\x007\x03\x00 \x00 \x037\x03\x08\x0b\x17\x00 \x00\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x83\x80\x80\x80\x00\x0b\xba\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A k\"\x01$\x80\x80\x80\x80\x00\x02@\x02@ \x00B\xff\x01\x83B\xcb\x00R\r\x00A\x00!\x02\x02@\x03@ \x02A\x10F\r\x01 \x01A\x08j \x02jB\x027\x03\x00 \x02A\x08j!\x02\x0c\x00\x0b\x0b \x00 \x01A\x08j\xadB \x86B\x04\x84B\x84\x80\x80\x80 \x10\x82\x80\x80\x80\x00\x1a \x01B\x027\x03\x18 \x01)\x03\x08\"\x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\x9c\x80\xc0\x80\x00A\x01 \x01A\x18jA\x01\x10\x93\x80\x80\x80\x00 \x011\x00\x18B\x04R\r\x00 \x011\x00\x10B\x04Q\r\x01\x0b\x00\x0b \x01A j$\x80\x80\x80\x80\x00B\x02\x0be\x02\x01\x7f\x01~#\x80\x80\x80\x80\x00A k\"\x00$\x80\x80\x80\x80\x00 \x00B\x84\x80\x80\x80\x107\x03\x18A\x9c\x80\xc0\x80\x00A\x01 \x00A\x18jA\x01\x10\x8a\x80\x80\x80\x00!\x01 \x00B\x84\x80\x80\x80 7\x03\x10 \x00 \x017\x03\x08 \x00A\x08j\x10\x9c\x80\x80\x80\x00!\x01 \x00A j$\x80\x80\x80\x80\x00 \x01\x0b\x14\x00\x02@ \x00B\xff\x01\x83B\xcb\x00Q\r\x00\x00\x0bB\x02\x0b\x83\x01\x01\x02\x7f#\x80\x80\x80\x80\x00A\x10k\"\x01$\x80\x80\x80\x80\x00A\x00!\x02\x02@\x03@ \x02A\x10F\r\x01 \x01 \x02jB\x027\x03\x00 \x02A\x08j!\x02\x0c\x00\x0b\x0b\x02@\x02@ \x00B\xff\x01\x83B\xcc\x00R\r\x00 \x00A\xa0\x82\xc0\x80\x00A\x02 \x01A\x02\x10\x93\x80\x80\x80\x00 \x011\x00\x00B\x04R\r\x00 \x01)\x03\x08B\xfe\x01\x83P\r\x01\x0b\x00\x0b \x01A\x10j$\x80\x80\x80\x80\x00B\x02\x0b\x0b\xba\x02\x01\x00A\x80\x80\xc0\x00\x0b\xb0\x02anested\x00\x00\x00\x10\x00\x01\x00\x00\x00\x01\x00\x10\x00\x06\x00\x00\x00val\x00\x18\x00\x10\x00\x03\x00\x00\x00data$\x00\x10\x00\x04\x00\x00\x00A\x00\x00\x00\x01\x00\x10\x00\x06\x00\x00\x00xy\x00\x00<\x00\x10\x00\x01\x00\x00\x00=\x00\x10\x00\x01\x00\x00\x00inner\x00\x00\x00P\x00\x10\x00\x05\x00\x00\x00transfercoordsamountn\x00\x10\x00\x06\x00\x00\x00used_event_simplepayload\x8d\x00\x10\x00\x07\x00\x00\x00used_event_with_refsused_event_with_data_typeused_event_with_topic_typeused_event_with_nested_dataused_event_with_nested_topicf1f2\x00\x00\x1a\x01\x10\x00\x02\x00\x00\x00\x1c\x01\x10\x00\x02\x00\x00\x00\x00\xc3)\x0econtractspecv0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08with_map\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01m\x00\x00\x00\x00\x00\x03\xec\x00\x00\x07\xd0\x00\x00\x00\nUsedMapKey\x00\x00\x00\x00\x07\xd0\x00\x00\x00\nUsedMapVal\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08with_vec\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01v\x00\x00\x00\x00\x00\x03\xea\x00\x00\x07\xd0\x00\x00\x00\x0eUsedVecElement\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nUnusedEnum\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01A\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01B\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nUsedMapKey\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02K1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02K2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nUsedMapVal\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01v\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nwith_error\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00\rUsedErrorEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nwith_param\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x0fUsedParamStruct\x00\x00\x00\x00\x00\x00\x00\x00\x02ie\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x10UsedParamIntEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\nwith_tuple\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01t\x00\x00\x00\x00\x00\x03\xed\x00\x00\x00\x02\x00\x00\x07\xd0\x00\x00\x00\x10UsedTupleElement\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bUnusedEvent\x00\x00\x00\x00\x01\x00\x00\x00\x0cunused_event\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cUnusedStruct\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cUsedResultOk\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bwith_option\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01o\x00\x00\x00\x00\x00\x03\xe8\x00\x00\x07\xd0\x00\x00\x00\x11UsedOptionElement\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bwith_result\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x07\xd0\x00\x00\x00\x0cUsedResultOk\x00\x00\x07\xd0\x00\x00\x00\rUsedErrorEnum\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0bwith_return\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x0eUsedReturnEnum\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\rUnusedIntEnum\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02U1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02U2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\rUsedErrorEnum\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x08NotFound\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07Invalid\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cwith_non_pub\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x10UsedNonPubStruct\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0eUsedReturnEnum\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01A\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01B\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0eUsedVecElement\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fUsedParamStruct\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01a\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x06nested\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x12UsedNestedInStruct\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fUsedRefDataType\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06nested\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x10UsedRefDataInner\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0epublish_simple\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fUsedEventSimple\x00\x00\x00\x00\x01\x00\x00\x00\x11used_event_simple\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06amount\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10UsedParamIntEnum\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01X\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01Y\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10UsedRefDataInner\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10UsedRefTopicType\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04Send\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Recv\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10UsedTupleElement\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0fwith_lib_struct\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x07StructC\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11UsedEventDataType\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x01y\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11UsedOptionElement\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04data\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11UsedEventWithRefs\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x14used_event_with_refs\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x07\xd0\x00\x00\x00\x10UsedRefTopicType\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07payload\x00\x00\x00\x07\xd0\x00\x00\x00\x0fUsedRefDataType\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12UsedEventDataInner\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12UsedEventDataOuter\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05inner\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x12UsedEventDataInner\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12UsedEventTopicType\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x08Transfer\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04Mint\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12UsedNestedInStruct\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11publish_data_type\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11publish_ref_event\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11with_tuple_return\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xed\x00\x00\x00\x02\x00\x00\x07\xd0\x00\x00\x00\x16UsedTupleReturnElement\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13UsedEventTopicInner\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13UsedEventTopicOuter\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x05inner\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x13UsedEventTopicInner\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12publish_topic_type\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12with_non_pub_error\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x03\xe9\x00\x00\x00\x04\x00\x00\x07\xd0\x00\x00\x00\x0fUsedNonPubError\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12with_wasm_imported\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01s\x00\x00\x00\x00\x00\x07\xd0\x00\x00\x00\x07StructA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13publish_nested_data\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14publish_nested_topic\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15UsedEventWithDataType\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x19used_event_with_data_type\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07payload\x00\x00\x00\x07\xd0\x00\x00\x00\x11UsedEventDataType\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16UsedTupleReturnElement\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03val\x00\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16UsedEventWithTopicType\x00\x00\x00\x00\x00\x01\x00\x00\x00\x1aused_event_with_topic_type\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x07\xd0\x00\x00\x00\x12UsedEventTopicType\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06amount\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17UsedEventWithNestedData\x00\x00\x00\x00\x01\x00\x00\x00\x1bused_event_with_nested_data\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04kind\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07payload\x00\x00\x00\x07\xd0\x00\x00\x00\x12UsedEventDataOuter\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18UnusedNonContractFnParam\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18UsedEventWithNestedTopic\x00\x00\x00\x01\x00\x00\x00\x1cused_event_with_nested_topic\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x04info\x00\x00\x07\xd0\x00\x00\x00\x13UsedEventTopicOuter\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06amount\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19UnusedNonContractFnReturn\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01x\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05EnumA\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05EnumB\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x02\x00\x00\x00\x07\x00\x00\x00\x07\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05EnumC\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x07StructA\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x01\x00\x00\x07\xd0\x00\x00\x00\x0cStructTupleA\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06ErrorA\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06ErrorB\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06ErrorC\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02E1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02E2\x00\x00\x00\x00\x00e\x00\x00\x00\x00\x00\x00\x00\x02E3\x00\x00\x00\x00\x00f\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventA\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventB\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_b\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06EventC\x00\x00\x00\x00\x00\x01\x00\x00\x00\x07event_c\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02f3\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07StructA\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07StructB\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07StructC\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02f1\x00\x00\x00\x00\x03\xea\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02f2\x00\x00\x00\x00\x00\x13\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08EnumIntA\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08EnumIntB\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08EnumIntC\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x02V1\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x02V2\x00\x00\x00\x00\x00\xc8\x00\x00\x00\x00\x00\x00\x00\x02V3\x00\x00\x00\x00\x01,\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStructTupleA\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStructTupleB\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0cStructTupleC\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x010\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x00\x00\x00\x011\x00\x00\x00\x00\x00\x00\x0b\x00\x1e\x11contractenvmetav0\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x00\x00\x00\x00+\x0econtractmetav0\x00\x00\x00\x00\x00\x00\x00\x05rsver\x00\x00\x00\x00\x00\x00\x061.91.0\x00\x00"; extern crate test; #[rustc_test_marker = "test::test_spec_shaking_v2"] #[doc(hidden)] @@ -21000,9 +20500,9 @@ mod test { ignore: false, ignore_message: ::core::option::Option::None, source_file: "tests/spec_shaking_v2/src/test.rs", - start_line: 11usize, + start_line: 16usize, start_col: 4usize, - end_line: 11usize, + end_line: 16usize, end_col: 24usize, compile_fail: false, no_run: false, @@ -21154,6 +20654,174 @@ mod test { } } } + extern crate test; + #[rustc_test_marker = "test::test_spec_shaking_v2_no_env_fallback_to_v1"] + #[doc(hidden)] + pub const test_spec_shaking_v2_no_env_fallback_to_v1: test::TestDescAndFn = + test::TestDescAndFn { + desc: test::TestDesc { + name: test::StaticTestName("test::test_spec_shaking_v2_no_env_fallback_to_v1"), + ignore: false, + ignore_message: ::core::option::Option::None, + source_file: "tests/spec_shaking_v2/src/test.rs", + start_line: 173usize, + start_col: 4usize, + end_line: 173usize, + end_col: 46usize, + compile_fail: false, + no_run: false, + should_panic: test::ShouldPanic::No, + test_type: test::TestType::UnitTest, + }, + testfn: test::StaticTestFn( + #[coverage(off)] + || test::assert_test_result(test_spec_shaking_v2_no_env_fallback_to_v1()), + ), + }; + fn test_spec_shaking_v2_no_env_fallback_to_v1() { + let entries = soroban_spec::read::from_wasm(WASM_NO_ENV).unwrap(); + let markers = soroban_spec::shaking::find_all(WASM_NO_ENV); + if !markers.is_empty() { + { + ::core::panicking::panic_fmt(format_args!( + "no markers should be present without experimental_spec_shaking_v2, found {0}", + markers.len(), + )); + } + } + let all_names: HashSet = + entries.iter().filter_map(entry_name).collect(); + let fn_names: Vec = entries + .iter() + .filter_map(|e| { + if let ScSpecEntry::FunctionV0(f) = e { + Some(f.name.to_utf8_string_lossy()) + } else { + None + } + }) + .collect(); + for expected_fn in [ + "with_param", + "with_return", + "with_error", + "with_vec", + "with_map", + "publish_simple", + "publish_topic_type", + "publish_data_type", + "publish_nested_topic", + "publish_nested_data", + "publish_ref_event", + "with_lib_struct", + "with_wasm_imported", + "with_option", + "with_result", + "with_non_pub", + "with_non_pub_error", + "with_tuple", + "with_tuple_return", + ] { + if !fn_names.contains(&expected_fn.into()) { + { + ::core::panicking::panic_fmt(format_args!("fn {0} missing", expected_fn)); + } + } + } + let pub_types = [ + "UsedParamStruct", + "UsedReturnEnum", + "UsedParamIntEnum", + "UsedErrorEnum", + "UsedNestedInStruct", + "UsedVecElement", + "UsedMapKey", + "UsedMapVal", + "UsedEventSimple", + "UsedEventTopicType", + "UsedEventWithTopicType", + "UsedEventDataType", + "UsedEventWithDataType", + "UsedEventTopicOuter", + "UsedEventTopicInner", + "UsedEventWithNestedTopic", + "UsedEventDataOuter", + "UsedEventDataInner", + "UsedEventWithNestedData", + "UsedRefTopicType", + "UsedRefDataType", + "UsedRefDataInner", + "UsedEventWithRefs", + "UsedOptionElement", + "UsedResultOk", + "UsedTupleElement", + "UsedTupleReturnElement", + "UnusedNonContractFnParam", + "UnusedNonContractFnReturn", + "UnusedStruct", + "UnusedEnum", + "UnusedIntEnum", + "UnusedEvent", + ]; + for name in pub_types { + if !all_names.contains(name) { + { + ::core::panicking::panic_fmt(format_args!( + "pub type/event {0} should have a spec entry without the feature", + name, + )); + } + } + } + let non_pub_types = [ + "UsedNonPubStruct", + "UsedNonPubError", + "UnusedNonPubStruct", + "UnusedNonPubError", + ]; + for name in non_pub_types { + if !!all_names.contains(name) { + { + ::core::panicking::panic_fmt(format_args!( + "non-pub type {0} should NOT have a spec entry without the feature", + name, + )); + } + } + } + let lib_imported_types = [ + "StructA", + "StructB", + "StructC", + "StructTupleA", + "StructTupleB", + "StructTupleC", + "EnumA", + "EnumB", + "EnumC", + "EnumIntA", + "EnumIntB", + "EnumIntC", + "ErrorA", + "ErrorB", + "ErrorC", + "EventA", + "EventB", + "EventC", + ]; + for name in lib_imported_types { + if !all_names.contains(name) { + { + ::core::panicking::panic_fmt( + format_args!( + "lib-imported type {0} should have a spec entry (rlib statics linked into cdylib)", + name, + ), + ); + } + } + } + } /// Extract the name from a non-function spec entry. fn entry_name(entry: &ScSpecEntry) -> Option { match entry { @@ -21171,5 +20839,8 @@ mod test { #[doc(hidden)] pub fn main() -> () { extern crate test; - test::test_main_static(&[&test_spec_shaking_v2]) + test::test_main_static(&[ + &test_spec_shaking_v2, + &test_spec_shaking_v2_no_env_fallback_to_v1, + ]) } diff --git a/tests-expanded/test_udt_tests.rs b/tests-expanded/test_udt_tests.rs index 0209acf69..c7111fe00 100644 --- a/tests-expanded/test_udt_tests.rs +++ b/tests-expanded/test_udt_tests.rs @@ -55,11 +55,6 @@ impl UdtEnum2 { *b"\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\x08UdtEnum2\0\0\0\x02\0\0\0\0\0\0\0\x01A\0\0\0\0\0\0\n\0\0\0\0\0\0\0\x01B\0\0\0\0\0\0\x0f" } } -impl soroban_sdk::SpecShakingMarker for UdtEnum2 { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() {} -} impl soroban_sdk::TryFromVal for UdtEnum2 { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -404,15 +399,6 @@ impl UdtEnum { *b"\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0\x07UdtEnum\0\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\x04UdtA\0\0\0\x01\0\0\0\0\0\0\0\x04UdtB\0\0\0\x01\0\0\x07\xd0\0\0\0\tUdtStruct\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\x04UdtC\0\0\0\x01\0\0\x07\xd0\0\0\0\x08UdtEnum2\0\0\0\x01\0\0\0\0\0\0\0\x04UdtD\0\0\0\x01\0\0\x07\xd0\0\0\0\x08UdtTuple" } } -impl soroban_sdk::SpecShakingMarker for UdtEnum { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UdtEnum { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -1019,14 +1005,6 @@ impl UdtTuple { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x08UdtTuple\0\0\0\x02\0\0\0\0\0\0\0\x010\0\0\0\0\0\0\x07\0\0\0\0\0\0\0\x011\0\0\0\0\0\x03\xea\0\0\0\x07" } } -impl soroban_sdk::SpecShakingMarker for UdtTuple { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - as soroban_sdk::SpecShakingMarker>::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UdtTuple { type Error = soroban_sdk::ConversionError; #[inline(always)] @@ -1412,15 +1390,6 @@ impl UdtStruct { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\tUdtStruct\0\0\0\0\0\0\x03\0\0\0\0\0\0\0\x01a\0\0\0\0\0\0\x07\0\0\0\0\0\0\0\x01b\0\0\0\0\0\0\x07\0\0\0\0\0\0\0\x01c\0\0\0\0\0\x03\xea\0\0\0\x07" } } -impl soroban_sdk::SpecShakingMarker for UdtStruct { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - ::spec_shaking_marker(); - as soroban_sdk::SpecShakingMarker>::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for UdtStruct { type Error = soroban_sdk::ConversionError; fn try_from_val( diff --git a/tests-expanded/test_workspace_lib_tests.rs b/tests-expanded/test_workspace_lib_tests.rs index cb8fd3bae..680a0c8c9 100644 --- a/tests-expanded/test_workspace_lib_tests.rs +++ b/tests-expanded/test_workspace_lib_tests.rs @@ -39,13 +39,6 @@ impl Value { *b"\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x05Value\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\x05value\0\0\0\0\0\0\x05" } } -impl soroban_sdk::SpecShakingMarker for Value { - #[doc(hidden)] - #[inline(always)] - fn spec_shaking_marker() { - ::spec_shaking_marker(); - } -} impl soroban_sdk::TryFromVal for Value { type Error = soroban_sdk::ConversionError; fn try_from_val( diff --git a/tests/spec_shaking_v2/src/test.rs b/tests/spec_shaking_v2/src/test.rs index ba359e554..72dd7b90d 100644 --- a/tests/spec_shaking_v2/src/test.rs +++ b/tests/spec_shaking_v2/src/test.rs @@ -7,6 +7,11 @@ use std::vec::Vec; const WASM: &[u8] = include_bytes!("../../../target/wasm32v1-none/release/test_spec_shaking_v2.wasm"); +// This crate is built twice during `make build-test-wasm`. The first time, it is built separately +// without the spec shaking v2 env variable set, and renamed to test_spec_shaking_v2_no_env.wasm. +const WASM_NO_ENV: &[u8] = + include_bytes!("../../../target/wasm32v1-none/release/test_spec_shaking_v2_no_env.wasm"); + #[test] fn test_spec_shaking_v2() { // Read all spec entries from the WASM. @@ -164,6 +169,149 @@ fn test_spec_shaking_v2() { } } +#[test] +fn test_spec_shaking_v2_no_env_fallback_to_v1() { + // Read all spec entries from the WASM. + let entries = soroban_spec::read::from_wasm(WASM_NO_ENV).unwrap(); + + // No markers should be embedded without the experimental feature. + let markers = soroban_spec::shaking::find_all(WASM_NO_ENV); + assert!( + markers.is_empty(), + "no markers should be present without experimental_spec_shaking_v2, found {}", + markers.len() + ); + + let all_names: HashSet = entries.iter().filter_map(entry_name).collect(); + + // All functions should be present in the spec. + let fn_names: Vec = entries + .iter() + .filter_map(|e| { + if let ScSpecEntry::FunctionV0(f) = e { + Some(f.name.to_utf8_string_lossy()) + } else { + None + } + }) + .collect(); + for expected_fn in [ + "with_param", + "with_return", + "with_error", + "with_vec", + "with_map", + "publish_simple", + "publish_topic_type", + "publish_data_type", + "publish_nested_topic", + "publish_nested_data", + "publish_ref_event", + "with_lib_struct", + "with_wasm_imported", + "with_option", + "with_result", + "with_non_pub", + "with_non_pub_error", + "with_tuple", + "with_tuple_return", + ] { + assert!( + fn_names.contains(&expected_fn.into()), + "fn {expected_fn} missing" + ); + } + + // Public types should have spec entries. + let pub_types = [ + "UsedParamStruct", + "UsedReturnEnum", + "UsedParamIntEnum", + "UsedErrorEnum", + "UsedNestedInStruct", + "UsedVecElement", + "UsedMapKey", + "UsedMapVal", + "UsedEventSimple", + "UsedEventTopicType", + "UsedEventWithTopicType", + "UsedEventDataType", + "UsedEventWithDataType", + "UsedEventTopicOuter", + "UsedEventTopicInner", + "UsedEventWithNestedTopic", + "UsedEventDataOuter", + "UsedEventDataInner", + "UsedEventWithNestedData", + "UsedRefTopicType", + "UsedRefDataType", + "UsedRefDataInner", + "UsedEventWithRefs", + "UsedOptionElement", + "UsedResultOk", + "UsedTupleElement", + "UsedTupleReturnElement", + "UnusedNonContractFnParam", + "UnusedNonContractFnReturn", + "UnusedStruct", + "UnusedEnum", + "UnusedIntEnum", + "UnusedEvent", + ]; + for name in pub_types { + assert!( + all_names.contains(name), + "pub type/event {name} should have a spec entry without the feature" + ); + } + + // Non-pub types should NOT have spec entries without the feature. + let non_pub_types = [ + "UsedNonPubStruct", + "UsedNonPubError", + "UnusedNonPubStruct", + "UnusedNonPubError", + ]; + for name in non_pub_types { + assert!( + !all_names.contains(name), + "non-pub type {name} should NOT have a spec entry without the feature" + ); + } + + // Lib-imported types are in the WASM spec (rlib statics linked into cdylib). + let lib_imported_types = [ + "StructA", + "StructB", + "StructC", + "StructTupleA", + "StructTupleB", + "StructTupleC", + "EnumA", + "EnumB", + "EnumC", + "EnumIntA", + "EnumIntB", + "EnumIntC", + "ErrorA", + "ErrorB", + "ErrorC", + "EventA", + "EventB", + "EventC", + ]; + for name in lib_imported_types { + assert!( + all_names.contains(name), + "lib-imported type {name} should have a spec entry (rlib statics linked into cdylib)" + ); + } + + // WASM-imported types have export = false without the feature, so they do + // not contribute additional spec entries. (Their names overlap with + // lib-imported types above, which ARE present from rlib linking.) +} + /// Extract the name from a non-function spec entry. fn entry_name(entry: &ScSpecEntry) -> Option { match entry { From 51dfc23f93d74fb36c4743ec8569b2f06af480c8 Mon Sep 17 00:00:00 2001 From: mootz12 Date: Wed, 8 Apr 2026 22:07:54 -0400 Subject: [PATCH 3/3] chore: copilot feedback --- .github/workflows/rust.yml | 1 - soroban-sdk-macros/src/lib.rs | 2 +- soroban-sdk/src/_features.rs | 2 +- tests-expanded/test_spec_shaking_v2_tests.rs | 10 ++++++---- tests/spec_shaking_v2/src/test.rs | 4 ++-- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index afb36cefe..e87acc5c7 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -12,7 +12,6 @@ concurrency: env: ARTIFACT_RETENTION_DAYS_FOR_TEST_WASMS: 7 - SOROBAN_SDK_BUILD_SYSTEM_SUPPORTS_SPEC_SHAKING_V2: 1 defaults: run: diff --git a/soroban-sdk-macros/src/lib.rs b/soroban-sdk-macros/src/lib.rs index 0319048dd..fa5728b43 100644 --- a/soroban-sdk-macros/src/lib.rs +++ b/soroban-sdk-macros/src/lib.rs @@ -86,7 +86,7 @@ pub(crate) fn default_crate_path() -> Path { /// at the time the macro expands (i.e. when the consumer crate is compiled). fn spec_shaking_v2_enabled() -> bool { cfg!(feature = "experimental_spec_shaking_v2") - && std::env::var("SOROBAN_SDK_BUILD_SYSTEM_SUPPORTS_SPEC_SHAKING_V2").is_ok() + && option_env!("SOROBAN_SDK_BUILD_SYSTEM_SUPPORTS_SPEC_SHAKING_V2").is_some() } #[derive(Debug, FromMeta)] diff --git a/soroban-sdk/src/_features.rs b/soroban-sdk/src/_features.rs index 79c8f2faa..718bc55ea 100644 --- a/soroban-sdk/src/_features.rs +++ b/soroban-sdk/src/_features.rs @@ -142,7 +142,7 @@ //! //! When the `experimental_spec_shaking_v2` feature is enabled but the env var //! is not set, the SDK falls back to spec shaking v1 behavior and emits a -//! compiler warning on wasm targets. This allows contracts to build with plain +//! build warning on wasm targets. This allows contracts to build with plain //! `cargo build` without errors, while still benefiting from v2 when built //! with compatible tooling. //! diff --git a/tests-expanded/test_spec_shaking_v2_tests.rs b/tests-expanded/test_spec_shaking_v2_tests.rs index 212478634..c3ae7ed1a 100644 --- a/tests-expanded/test_spec_shaking_v2_tests.rs +++ b/tests-expanded/test_spec_shaking_v2_tests.rs @@ -20683,10 +20683,12 @@ mod test { let markers = soroban_spec::shaking::find_all(WASM_NO_ENV); if !markers.is_empty() { { - ::core::panicking::panic_fmt(format_args!( - "no markers should be present without experimental_spec_shaking_v2, found {0}", - markers.len(), - )); + ::core::panicking::panic_fmt( + format_args!( + "no markers should be present when experimental_spec_shaking_v2 is disabled due to missing env var, found {0}", + markers.len(), + ), + ); } } let all_names: HashSet = diff --git a/tests/spec_shaking_v2/src/test.rs b/tests/spec_shaking_v2/src/test.rs index 72dd7b90d..7a7a8559f 100644 --- a/tests/spec_shaking_v2/src/test.rs +++ b/tests/spec_shaking_v2/src/test.rs @@ -7,7 +7,7 @@ use std::vec::Vec; const WASM: &[u8] = include_bytes!("../../../target/wasm32v1-none/release/test_spec_shaking_v2.wasm"); -// This crate is built twice during `make build-test-wasm`. The first time, it is built separately +// This crate is built twice during `make build-test-wasms`. The first time, it is built separately // without the spec shaking v2 env variable set, and renamed to test_spec_shaking_v2_no_env.wasm. const WASM_NO_ENV: &[u8] = include_bytes!("../../../target/wasm32v1-none/release/test_spec_shaking_v2_no_env.wasm"); @@ -178,7 +178,7 @@ fn test_spec_shaking_v2_no_env_fallback_to_v1() { let markers = soroban_spec::shaking::find_all(WASM_NO_ENV); assert!( markers.is_empty(), - "no markers should be present without experimental_spec_shaking_v2, found {}", + "no markers should be present when experimental_spec_shaking_v2 is disabled due to missing env var, found {}", markers.len() );