mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-11 03:41:06 +00:00
GetCallIndex trait (#13558)
* GetCallIndex trait * final impl * ".git/.scripts/commands/fmt/fmt.sh" * Docs Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * One more test Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> * Doc Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> --------- Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io> Co-authored-by: command-bot <> Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
This commit is contained in:
@@ -984,7 +984,8 @@ pub fn compact(_: TokenStream, _: TokenStream) -> TokenStream {
|
||||
///
|
||||
/// The macro creates an enum `Call` with one variant per dispatchable. This enum implements:
|
||||
/// [`Clone`], [`Eq`], [`PartialEq`], [`Debug`] (with stripped implementation in `not("std")`),
|
||||
/// `Encode`, `Decode`, `GetDispatchInfo`, `GetCallName`, and `UnfilteredDispatchable`.
|
||||
/// `Encode`, `Decode`, `GetDispatchInfo`, `GetCallName`, `GetCallIndex` and
|
||||
/// `UnfilteredDispatchable`.
|
||||
///
|
||||
/// The macro implements the `Callable` trait on `Pallet` and a function `call_functions`
|
||||
/// which returns the dispatchable metadata.
|
||||
|
||||
@@ -324,6 +324,21 @@ pub fn expand_call(def: &mut Def) -> proc_macro2::TokenStream {
|
||||
}
|
||||
}
|
||||
|
||||
impl<#type_impl_gen> #frame_support::dispatch::GetCallIndex for #call_ident<#type_use_gen>
|
||||
#where_clause
|
||||
{
|
||||
fn get_call_index(&self) -> u8 {
|
||||
match *self {
|
||||
#( Self::#fn_name { .. } => #call_index, )*
|
||||
Self::__Ignore(_, _) => unreachable!("__PhantomItem cannot be used."),
|
||||
}
|
||||
}
|
||||
|
||||
fn get_call_indices() -> &'static [u8] {
|
||||
&[ #( #call_index, )* ]
|
||||
}
|
||||
}
|
||||
|
||||
impl<#type_impl_gen> #frame_support::traits::UnfilteredDispatchable
|
||||
for #call_ident<#type_use_gen>
|
||||
#where_clause
|
||||
|
||||
@@ -29,7 +29,8 @@ pub use crate::{
|
||||
result,
|
||||
},
|
||||
traits::{
|
||||
CallMetadata, GetCallMetadata, GetCallName, GetStorageVersion, UnfilteredDispatchable,
|
||||
CallMetadata, GetCallIndex, GetCallMetadata, GetCallName, GetStorageVersion,
|
||||
UnfilteredDispatchable,
|
||||
},
|
||||
};
|
||||
#[cfg(feature = "std")]
|
||||
|
||||
@@ -74,8 +74,8 @@ pub use randomness::Randomness;
|
||||
|
||||
mod metadata;
|
||||
pub use metadata::{
|
||||
CallMetadata, CrateVersion, GetCallMetadata, GetCallName, GetStorageVersion, PalletInfo,
|
||||
PalletInfoAccess, PalletInfoData, PalletsInfoAccess, StorageVersion,
|
||||
CallMetadata, CrateVersion, GetCallIndex, GetCallMetadata, GetCallName, GetStorageVersion,
|
||||
PalletInfo, PalletInfoAccess, PalletInfoData, PalletsInfoAccess, StorageVersion,
|
||||
STORAGE_VERSION_STORAGE_KEY_POSTFIX,
|
||||
};
|
||||
|
||||
|
||||
@@ -101,12 +101,20 @@ pub struct CallMetadata {
|
||||
|
||||
/// Gets the function name of the Call.
|
||||
pub trait GetCallName {
|
||||
/// Return all function names.
|
||||
/// Return all function names in the same order as [`GetCallIndex`].
|
||||
fn get_call_names() -> &'static [&'static str];
|
||||
/// Return the function name of the Call.
|
||||
fn get_call_name(&self) -> &'static str;
|
||||
}
|
||||
|
||||
/// Gets the function index of the Call.
|
||||
pub trait GetCallIndex {
|
||||
/// Return all call indices in the same order as [`GetCallName`].
|
||||
fn get_call_indices() -> &'static [u8];
|
||||
/// Return the index of this Call.
|
||||
fn get_call_index(&self) -> u8;
|
||||
}
|
||||
|
||||
/// Gets the metadata for the Call - function name and pallet name.
|
||||
pub trait GetCallMetadata {
|
||||
/// Return all module names.
|
||||
|
||||
@@ -25,8 +25,8 @@ use frame_support::{
|
||||
pallet_prelude::{StorageInfoTrait, ValueQuery},
|
||||
storage::unhashed,
|
||||
traits::{
|
||||
ConstU32, GetCallName, GetStorageVersion, OnFinalize, OnGenesis, OnInitialize,
|
||||
OnRuntimeUpgrade, PalletError, PalletInfoAccess, StorageVersion,
|
||||
ConstU32, GetCallIndex, GetCallName, GetStorageVersion, OnFinalize, OnGenesis,
|
||||
OnInitialize, OnRuntimeUpgrade, PalletError, PalletInfoAccess, StorageVersion,
|
||||
},
|
||||
weights::{RuntimeDbWeight, Weight},
|
||||
};
|
||||
@@ -231,6 +231,12 @@ pub mod pallet {
|
||||
Ok(().into())
|
||||
}
|
||||
|
||||
#[pallet::call_index(4)]
|
||||
#[pallet::weight(1)]
|
||||
pub fn foo_index_out_of_order(_origin: OriginFor<T>) -> DispatchResult {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
// Test for DispatchResult return type
|
||||
#[pallet::call_index(2)]
|
||||
#[pallet::weight(1)]
|
||||
@@ -728,8 +734,25 @@ fn call_expand() {
|
||||
assert_eq!(call_foo.get_call_name(), "foo");
|
||||
assert_eq!(
|
||||
pallet::Call::<Runtime>::get_call_names(),
|
||||
&["foo", "foo_storage_layer", "foo_no_post_info", "check_for_dispatch_context"],
|
||||
&[
|
||||
"foo",
|
||||
"foo_storage_layer",
|
||||
"foo_index_out_of_order",
|
||||
"foo_no_post_info",
|
||||
"check_for_dispatch_context"
|
||||
],
|
||||
);
|
||||
|
||||
assert_eq!(call_foo.get_call_index(), 0u8);
|
||||
assert_eq!(pallet::Call::<Runtime>::get_call_indices(), &[0u8, 1u8, 4u8, 2u8, 3u8])
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn call_expand_index() {
|
||||
let call_foo = pallet::Call::<Runtime>::foo_index_out_of_order {};
|
||||
|
||||
assert_eq!(call_foo.get_call_index(), 4u8);
|
||||
assert_eq!(pallet::Call::<Runtime>::get_call_indices(), &[0u8, 1u8, 4u8, 2u8, 3u8])
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user