From 3f72c47fff09039079017fbf9e602d168280d365 Mon Sep 17 00:00:00 2001 From: Pavlo Khrystenko Date: Wed, 6 Nov 2024 15:59:14 +0100 Subject: [PATCH 1/6] add deprecation on impl blocks --- Cargo.lock | 1 + .../api/proc-macro/src/runtime_metadata.rs | 41 +++++++++++++++---- substrate/primitives/api/test/Cargo.toml | 1 + .../api/test/tests/decl_and_impl.rs | 18 ++++++++ .../api/test/tests/runtime_calls.rs | 2 + 5 files changed, 56 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a824faedd6b37..82b6fe091204f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -21640,6 +21640,7 @@ dependencies = [ "sp-api 26.0.0", "sp-consensus", "sp-core 28.0.0", + "sp-metadata-ir 0.6.0", "sp-runtime 31.0.1", "sp-state-machine 0.35.0", "sp-tracing 16.0.0", diff --git a/substrate/primitives/api/proc-macro/src/runtime_metadata.rs b/substrate/primitives/api/proc-macro/src/runtime_metadata.rs index 6be3963392598..9c96625b7667f 100644 --- a/substrate/primitives/api/proc-macro/src/runtime_metadata.rs +++ b/substrate/primitives/api/proc-macro/src/runtime_metadata.rs @@ -17,7 +17,7 @@ use proc_macro2::TokenStream as TokenStream2; use quote::quote; -use syn::{parse_quote, spanned::Spanned, ItemImpl, ItemTrait, Result}; +use syn::{parse_quote, spanned::Spanned, ImplItem, ItemImpl, ItemTrait, Result}; use crate::utils::{ extract_api_version, extract_impl_trait, filter_cfg_attributes, generate_crate_access, @@ -131,12 +131,13 @@ pub fn generate_decl_runtime_metadata<'a>( methods.push(quote!( #( #attrs )* if #version <= impl_version { + let deprecation = if let Some(deprecation) = impl_deprecations.remove(&#method_name) { deprecation } else { #deprecation }; Some(#crate_::metadata_ir::RuntimeApiMethodMetadataIR { name: #method_name, inputs: #crate_::vec![ #( #inputs, )* ], output: #output, docs: #docs, - deprecation_info: #deprecation, + deprecation_info: deprecation, }) } else { None @@ -173,9 +174,13 @@ pub fn generate_decl_runtime_metadata<'a>( #crate_::frame_metadata_enabled! { #( #attrs )* #[inline(always)] - pub fn runtime_metadata #impl_generics (impl_version: u32) -> #crate_::metadata_ir::RuntimeApiMetadataIR + pub fn runtime_metadata #impl_generics ( + impl_version: u32, + mut impl_deprecations: #crate_::scale_info::prelude::collections::BTreeMap<&str, #crate_::metadata_ir::DeprecationStatusIR> + ) -> #crate_::metadata_ir::RuntimeApiMetadataIR #where_clause { + let deprecation = if let Some(deprecation) = impl_deprecations.remove(&#trait_name) { deprecation } else { #deprecation }; #crate_::metadata_ir::RuntimeApiMetadataIR { name: #trait_name, methods: [ #( #methods, )* ] @@ -183,7 +188,7 @@ pub fn generate_decl_runtime_metadata<'a>( .filter_map(|maybe_m| maybe_m) .collect(), docs: #docs, - deprecation_info: #deprecation, + deprecation_info: deprecation, } } } @@ -222,6 +227,24 @@ pub fn generate_impl_runtime_metadata(impls: &[ItemImpl]) -> Result