mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-28 08:37:56 +00:00
Implement parameterisable modules (#1800)
* first implementation
* remove done comment
* origin done
* impl log for instance
* impl inherent for instance
* Fix wasm build + full example build
this requires parity codec implements codec for core::marker::PhantomData
* patch parity-codec link to github branch
* improve internal names and fix instance prefix
* Fix in macros
* add test modules for support
this allow to test for construct_runtime as well.
The reason to have put that in another crate is:
* if we put test in `tests/` dir of srml/support then decl_storage fails to get
srml-support access because it believes it is inside srml-support
crate and so derive access to `quote!{ crate }` but this is wrong
(and I don't see any way to prevent that, and it only bother us so I
don't think that matters that much)
* if we put test inside lib.rs then contruct_runtime cannot be used
because it call some macros that are defined with macros
(decl_outer_event and decl_outer_origin) and thus rustc complains.
* defaultinstance to its own struct to avoid errors
* enforce <T, I> for Event and Config, impl test
* add origin, log, inherent to test
* test more code generation
* basic storage test
* fix typo
* rename a few imports and field
* delete wip test in example and runtime
* change default prefix to make it backward compatible with test
* rename Instance to I and Instantiable to Instance
note: the name of generic parameter I is only enforce by decl_module!
and this could be rewritten
* doc
* clean old TODOs
* update parity-codec to 3.2
* update node impl version + builds
* fix warning
* fix unrelated grandpa test
* refactor code
This commit is contained in:
@@ -28,34 +28,20 @@ macro_rules! impl_outer_origin {
|
||||
(
|
||||
$(#[$attr:meta])*
|
||||
pub enum $name:ident for $runtime:ident {
|
||||
$( $module:ident $( <$generic:ident> )* ),* $(,)*
|
||||
$( $module:ident $( <$generic:ident $(, $instance:path )? > )? ),* $(,)?
|
||||
}
|
||||
) => {
|
||||
$crate::impl_outer_origin! {
|
||||
$(#[$attr])*
|
||||
pub enum $name for $runtime where system = system {
|
||||
$( $module $( <$generic> )*, )*
|
||||
$( $module $( <$generic $(, $instance )? > )?, )*
|
||||
}
|
||||
}
|
||||
};
|
||||
(
|
||||
$(#[$attr:meta])*
|
||||
pub enum $name:ident for $runtime:ident where system = $system:ident {}
|
||||
) => {
|
||||
$crate::impl_outer_origin!(
|
||||
$( #[$attr] )*;
|
||||
$name;
|
||||
$runtime;
|
||||
$system;
|
||||
Modules { };
|
||||
;
|
||||
);
|
||||
};
|
||||
(
|
||||
$(#[$attr:meta])*
|
||||
pub enum $name:ident for $runtime:ident where system = $system:ident {
|
||||
$module:ident,
|
||||
$( $rest_module:ident $( <$rest_generic:ident> )* ),* $(,)*
|
||||
$( $module:ident $( <$generic:ident $(, $instance:path )?> )? ),* $(,)?
|
||||
}
|
||||
) => {
|
||||
$crate::impl_outer_origin!(
|
||||
@@ -63,64 +49,30 @@ macro_rules! impl_outer_origin {
|
||||
$name;
|
||||
$runtime;
|
||||
$system;
|
||||
Modules { $( $rest_module $( <$rest_generic> )*, )* };
|
||||
$module;
|
||||
);
|
||||
};
|
||||
(
|
||||
$(#[$attr:meta])*
|
||||
pub enum $name:ident for $runtime:ident where system = $system:ident {
|
||||
$module:ident<T>,
|
||||
$( $rest_module:ident $( <$rest_generic:ident> )* ),* $(,)*
|
||||
}
|
||||
) => {
|
||||
$crate::impl_outer_origin!(
|
||||
$( #[$attr] )*;
|
||||
$name;
|
||||
$runtime;
|
||||
$system;
|
||||
Modules { $( $rest_module $( <$rest_generic> )*, )* };
|
||||
$module<$runtime>;
|
||||
Modules { $( $module $( <$generic $(, $instance )? > )*, )* };
|
||||
);
|
||||
};
|
||||
|
||||
// Replace generic param with runtime
|
||||
|
||||
(
|
||||
$(#[$attr:meta])*;
|
||||
$name:ident;
|
||||
$runtime:ident;
|
||||
$system:ident;
|
||||
Modules {
|
||||
$module:ident,
|
||||
$( $rest_module:ident $( <$rest_generic:ident> )*, )*
|
||||
$module:ident $( <T $(, $instance:path )? > )?,
|
||||
$( $rest_module:tt )*
|
||||
};
|
||||
$( $parsed_module:ident $( <$generic_param:ident> )* ),*;
|
||||
$( $parsed:tt )*
|
||||
) => {
|
||||
$crate::impl_outer_origin!(
|
||||
$( #[$attr] )*;
|
||||
$name;
|
||||
$runtime;
|
||||
$system;
|
||||
Modules { $( $rest_module $( <$rest_generic> )*, )* };
|
||||
$( $parsed_module $( <$generic_param> )* ),*, $module;
|
||||
);
|
||||
};
|
||||
(
|
||||
$(#[$attr:meta])*;
|
||||
$name:ident;
|
||||
$runtime:ident;
|
||||
$system:ident;
|
||||
Modules {
|
||||
$module:ident<T>,
|
||||
$( $rest_module:ident $( <$rest_generic:ident> )*, )*
|
||||
};
|
||||
$( $parsed_module:ident $( <$generic_param:ident> )* ),*;
|
||||
) => {
|
||||
$crate::impl_outer_origin!(
|
||||
$( #[$attr] )*;
|
||||
$name;
|
||||
$runtime;
|
||||
$system;
|
||||
Modules { $( $rest_module $( <$rest_generic> )*, )* };
|
||||
$( $parsed_module $( <$generic_param> )* ),*, $module<$runtime>;
|
||||
Modules { $( $rest_module )* };
|
||||
$( $parsed )* $module $( <$runtime $(, $instance )? > )?,
|
||||
);
|
||||
};
|
||||
|
||||
@@ -131,8 +83,8 @@ macro_rules! impl_outer_origin {
|
||||
$name:ident;
|
||||
$runtime:ident;
|
||||
$system:ident;
|
||||
Modules {};
|
||||
$( $module:ident $( <$generic_param:ident> )* ),*;
|
||||
Modules { };
|
||||
$( $module:ident $( <$generic_param:ident $(, $generic_instance:path )? > )* ,)*
|
||||
) => {
|
||||
// Workaround for https://github.com/rust-lang/rust/issues/26925 . Remove when sorted.
|
||||
#[derive(Clone, PartialEq, Eq)]
|
||||
@@ -142,7 +94,7 @@ macro_rules! impl_outer_origin {
|
||||
pub enum $name {
|
||||
system($system::Origin<$runtime>),
|
||||
$(
|
||||
$module($module::Origin $( <$generic_param> )* ),
|
||||
$module($module::Origin $( <$generic_param $(, $generic_instance )? > )* ),
|
||||
)*
|
||||
#[allow(dead_code)]
|
||||
Void($crate::Void)
|
||||
@@ -175,13 +127,13 @@ macro_rules! impl_outer_origin {
|
||||
}
|
||||
}
|
||||
$(
|
||||
impl From<$module::Origin $( <$generic_param> )*> for $name {
|
||||
fn from(x: $module::Origin $( <$generic_param> )*) -> Self {
|
||||
impl From<$module::Origin $( <$generic_param $(, $generic_instance )? > )*> for $name {
|
||||
fn from(x: $module::Origin $( <$generic_param $(, $generic_instance )? > )*) -> Self {
|
||||
$name::$module(x)
|
||||
}
|
||||
}
|
||||
impl Into<Option<$module::Origin $( <$generic_param> )*>> for $name {
|
||||
fn into(self) -> Option<$module::Origin $( <$generic_param> )*> {
|
||||
impl Into<Option<$module::Origin $( <$generic_param $(, $generic_instance )? > )*>> for $name {
|
||||
fn into(self) -> Option<$module::Origin $( <$generic_param $(, $generic_instance )? > )*> {
|
||||
if let $name::$module(l) = self {
|
||||
Some(l)
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user