mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-29 17:17:56 +00:00
cf7e2db1b7
* add follow_stream impl * follow_stream_unpin first draft * add tests for follow_stream_unpin * more tests and fixes for follow_stream_unpin * first pass follow_stream_driver * follow_stream_driver: add tests, fix things, buffer events from last finalized * First pass finishing Backend impl * Fix test compile issues * clippy fixes * clippy fix and consistify light_client * revert lightclient tweak * revert other lightclient thing * cargo fmt * start testing unstable backend behind feature flag * more test fixes and move test-runtime metadata path just incase * fix compile error * ensure transaction progress stream actually used and fix another test * cargo fmt * CI tweak * improve some comments and address some feedback bits * update CI to use our own nightly binary * wait for finalized block perhaps
136 lines
4.4 KiB
Rust
136 lines
4.4 KiB
Rust
use codec::{Decode, Encode};
|
|
use subxt::utils::AccountId32;
|
|
|
|
#[derive(Encode, Decode, subxt::ext::scale_encode::EncodeAsType, subxt::ext::scale_decode::DecodeAsType, Debug)]
|
|
#[encode_as_type(crate_path = "subxt::ext::scale_encode")]
|
|
#[decode_as_type(crate_path = "subxt::ext::scale_decode")]
|
|
pub struct CustomAddress(u16);
|
|
|
|
#[derive(Encode, Decode, subxt::ext::scale_encode::EncodeAsType, subxt::ext::scale_decode::DecodeAsType, Debug)]
|
|
#[encode_as_type(crate_path = "subxt::ext::scale_encode")]
|
|
#[decode_as_type(crate_path = "subxt::ext::scale_decode")]
|
|
pub struct Generic<T>(T);
|
|
|
|
#[derive(Encode, Decode, subxt::ext::scale_encode::EncodeAsType, subxt::ext::scale_decode::DecodeAsType, Debug)]
|
|
#[encode_as_type(crate_path = "subxt::ext::scale_encode")]
|
|
#[decode_as_type(crate_path = "subxt::ext::scale_decode")]
|
|
pub struct Second<T, U>(T, U);
|
|
|
|
#[derive(Encode, Decode, Debug)]
|
|
pub struct DoesntImplEncodeDecodeAsType(u16);
|
|
|
|
#[subxt::subxt(
|
|
runtime_metadata_path = "../../../../artifacts/polkadot_metadata_small.scale",
|
|
substitute_type(
|
|
path = "sp_runtime::multiaddress::MultiAddress<A, B>",
|
|
// Discarding both params:
|
|
with = "crate::CustomAddress"
|
|
)
|
|
)]
|
|
pub mod node_runtime {}
|
|
|
|
#[subxt::subxt(
|
|
runtime_metadata_path = "../../../../artifacts/polkadot_metadata_small.scale",
|
|
substitute_type(
|
|
path = "sp_runtime::multiaddress::MultiAddress<A, B>",
|
|
// Discarding second param:
|
|
with = "crate::Generic<A>"
|
|
)
|
|
)]
|
|
pub mod node_runtime2 {}
|
|
|
|
#[subxt::subxt(
|
|
runtime_metadata_path = "../../../../artifacts/polkadot_metadata_small.scale",
|
|
substitute_type(
|
|
path = "sp_runtime::multiaddress::MultiAddress<A, B>",
|
|
// Discarding first param:
|
|
with = "crate::Generic<B>"
|
|
)
|
|
)]
|
|
pub mod node_runtime3 {}
|
|
|
|
#[subxt::subxt(
|
|
runtime_metadata_path = "../../../../artifacts/polkadot_metadata_small.scale",
|
|
substitute_type(
|
|
path = "sp_runtime::multiaddress::MultiAddress<A, B>",
|
|
// Swapping params:
|
|
with = "crate::Second<B, A>"
|
|
)
|
|
)]
|
|
pub mod node_runtime4 {}
|
|
|
|
#[subxt::subxt(
|
|
runtime_metadata_path = "../../../../artifacts/polkadot_metadata_small.scale",
|
|
substitute_type(
|
|
path = "sp_runtime::multiaddress::MultiAddress",
|
|
// Ignore input params and just use concrete types on output:
|
|
with = "crate::Second<bool, ::std::vec::Vec<u8>>"
|
|
)
|
|
)]
|
|
pub mod node_runtime5 {}
|
|
|
|
#[subxt::subxt(
|
|
runtime_metadata_path = "../../../../artifacts/polkadot_metadata_small.scale",
|
|
substitute_type(
|
|
path = "sp_runtime::multiaddress::MultiAddress<A, B>",
|
|
// We can put a static type in, too:
|
|
with = "crate::Second<B, u16>"
|
|
)
|
|
)]
|
|
pub mod node_runtime6 {}
|
|
|
|
#[subxt::subxt(
|
|
runtime_metadata_path = "../../../../artifacts/polkadot_metadata_small.scale",
|
|
substitute_type(
|
|
path = "sp_runtime::multiaddress::MultiAddress<A, B>",
|
|
// Check that things can be wrapped in our Static type:
|
|
with = "::subxt::utils::Static<crate::DoesntImplEncodeDecodeAsType>"
|
|
)
|
|
)]
|
|
pub mod node_runtime7 {}
|
|
|
|
#[subxt::subxt(
|
|
runtime_metadata_path = "../../../../artifacts/polkadot_metadata_small.scale",
|
|
substitute_type(
|
|
path = "sp_runtime::multiaddress::MultiAddress<A, B>",
|
|
// Recursive type param substitution should work too (swapping out nested A and B):
|
|
with = "::subxt::utils::Static<crate::Second<A, B>>"
|
|
)
|
|
)]
|
|
pub mod node_runtime8 {}
|
|
|
|
fn main() {
|
|
// We assume Polkadot's config of MultiAddress<AccountId32, ()> here
|
|
let _ = node_runtime::tx()
|
|
.balances()
|
|
.transfer_allow_death(CustomAddress(1337), 123);
|
|
|
|
let _ = node_runtime2::tx()
|
|
.balances()
|
|
.transfer_allow_death(Generic(AccountId32::from([0x01;32])), 123);
|
|
|
|
let _ = node_runtime3::tx()
|
|
.balances()
|
|
.transfer_allow_death(Generic(()), 123);
|
|
|
|
let _ = node_runtime4::tx()
|
|
.balances()
|
|
.transfer_allow_death(Second((), AccountId32::from([0x01;32])), 123);
|
|
|
|
let _ = node_runtime5::tx()
|
|
.balances()
|
|
.transfer_allow_death(Second(true, vec![1u8, 2u8]), 123);
|
|
|
|
let _ = node_runtime6::tx()
|
|
.balances()
|
|
.transfer_allow_death(Second((), 1234u16), 123);
|
|
|
|
let _ = node_runtime7::tx()
|
|
.balances()
|
|
.transfer_allow_death(subxt::utils::Static(DoesntImplEncodeDecodeAsType(1337)), 123);
|
|
|
|
let _ = node_runtime8::tx()
|
|
.balances()
|
|
.transfer_allow_death(subxt::utils::Static(Second(AccountId32::from([0x01;32]), ())), 123);
|
|
}
|