mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-07-24 18:15:48 +00:00
sp-api: Set correct where bound in the generated code (#14252)
The where bound for the `create_metadata` function wasn't correct. This pr fixes this by using the where bound declared at the type declaration augmented with the manual where bound.
This commit is contained in:
Generated
+1
@@ -10654,6 +10654,7 @@ dependencies = [
|
|||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
"rustversion",
|
"rustversion",
|
||||||
"sc-block-builder",
|
"sc-block-builder",
|
||||||
|
"scale-info",
|
||||||
"sp-api",
|
"sp-api",
|
||||||
"sp-consensus",
|
"sp-consensus",
|
||||||
"sp-core",
|
"sp-core",
|
||||||
|
|||||||
@@ -162,15 +162,18 @@ pub fn generate_decl_runtime_metadata(decl: &ItemTrait) -> TokenStream2 {
|
|||||||
ty.default = None;
|
ty.default = None;
|
||||||
}
|
}
|
||||||
|
|
||||||
let where_clause = where_clause
|
where_clause
|
||||||
.iter()
|
.into_iter()
|
||||||
.map(|ty| quote!(#ty: #crate_::scale_info::TypeInfo + 'static));
|
.map(|ty| parse_quote!(#ty: #crate_::scale_info::TypeInfo + 'static))
|
||||||
|
.for_each(|w| generics.make_where_clause().predicates.push(w));
|
||||||
|
|
||||||
|
let (impl_generics, _, where_clause) = generics.split_for_impl();
|
||||||
|
|
||||||
quote!(
|
quote!(
|
||||||
#( #attrs )*
|
#( #attrs )*
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
pub fn runtime_metadata #generics () -> #crate_::metadata_ir::RuntimeApiMetadataIR
|
pub fn runtime_metadata #impl_generics () -> #crate_::metadata_ir::RuntimeApiMetadataIR
|
||||||
where #( #where_clause, )*
|
#where_clause
|
||||||
{
|
{
|
||||||
#crate_::metadata_ir::RuntimeApiMetadataIR {
|
#crate_::metadata_ir::RuntimeApiMetadataIR {
|
||||||
name: #trait_name,
|
name: #trait_name,
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ codec = { package = "parity-scale-codec", version = "3.2.2" }
|
|||||||
sp-state-machine = { version = "0.13.0", path = "../../state-machine" }
|
sp-state-machine = { version = "0.13.0", path = "../../state-machine" }
|
||||||
trybuild = "1.0.74"
|
trybuild = "1.0.74"
|
||||||
rustversion = "1.0.6"
|
rustversion = "1.0.6"
|
||||||
|
scale-info = { version = "2.5.0", default-features = false, features = ["derive"] }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
criterion = "0.4.0"
|
criterion = "0.4.0"
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
use codec::{Decode, Encode};
|
||||||
|
use scale_info::TypeInfo;
|
||||||
|
use sp_runtime::traits::{Block as BlockT, GetNodeBlockType};
|
||||||
|
use substrate_test_runtime_client::runtime::Block;
|
||||||
|
|
||||||
|
struct Runtime {}
|
||||||
|
impl GetNodeBlockType for Runtime {
|
||||||
|
type NodeBlock = Block;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait CustomTrait: Encode + Decode + TypeInfo {}
|
||||||
|
|
||||||
|
#[derive(Encode, Decode, TypeInfo)]
|
||||||
|
pub struct SomeImpl;
|
||||||
|
impl CustomTrait for SomeImpl {}
|
||||||
|
|
||||||
|
#[derive(Encode, Decode, TypeInfo)]
|
||||||
|
pub struct SomeOtherType<C: CustomTrait>(C);
|
||||||
|
|
||||||
|
sp_api::decl_runtime_apis! {
|
||||||
|
pub trait Api<A> where A: CustomTrait {
|
||||||
|
fn test() -> A;
|
||||||
|
fn test2() -> SomeOtherType<A>;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sp_api::impl_runtime_apis! {
|
||||||
|
impl self::Api<Block, SomeImpl> for Runtime {
|
||||||
|
fn test() -> SomeImpl { SomeImpl }
|
||||||
|
fn test2() -> SomeOtherType<SomeImpl> { SomeOtherType(SomeImpl) }
|
||||||
|
}
|
||||||
|
|
||||||
|
impl sp_api::Core<Block> for Runtime {
|
||||||
|
fn version() -> sp_version::RuntimeVersion {
|
||||||
|
unimplemented!()
|
||||||
|
}
|
||||||
|
fn execute_block(_: Block) {
|
||||||
|
unimplemented!()
|
||||||
|
}
|
||||||
|
fn initialize_block(_: &<Block as BlockT>::Header) {
|
||||||
|
unimplemented!()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
||||||
Reference in New Issue
Block a user