mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-01 04:17:57 +00:00
Move PalletVersion away from the crate version (#9165)
* Move `PalletVersion` away from the crate version Before this pr, `PalletVersion` was referring to the crate version that hosted the pallet. This pr introduces a custom `package.metadata.frame` section in the `Cargo.toml` that can contain a `pallet-version` key value pair. While the value is expected to be a valid u16. If this key/value pair isn't given, the version is set to 1. It also changes the `PalletVersion` declaration. We now only have one `u16` that represents the version. Not a major/minor/patch version. As the old `PalletVersion` was starting with the `u16` major, decoding the old values will work. * Overhaul the entire implementation - Drop PalletVersion - Introduce StorageVersion - StorageVersion needs to be set in the crate and set for the macros - Added migration * Fix migrations * Review feedback * Remove unneeded dep * remove pub consts * Brings back logging and implements `GetStorageVersion` * Return weight from migration * Fmt and remove unused import * Update frame/support/src/dispatch.rs Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com> * Update frame/support/src/traits/metadata.rs Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com> Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com>
This commit is contained in:
@@ -25,6 +25,7 @@ mod keyword {
|
||||
syn::custom_keyword!(Pallet);
|
||||
syn::custom_keyword!(generate_store);
|
||||
syn::custom_keyword!(generate_storage_info);
|
||||
syn::custom_keyword!(storage_version);
|
||||
syn::custom_keyword!(Store);
|
||||
}
|
||||
|
||||
@@ -43,14 +44,18 @@ pub struct PalletStructDef {
|
||||
/// Whether to specify the storages max encoded len when implementing `StorageInfoTrait`.
|
||||
/// Contains the span of the attribute.
|
||||
pub generate_storage_info: Option<proc_macro2::Span>,
|
||||
/// The current storage version of the pallet.
|
||||
pub storage_version: Option<syn::Path>,
|
||||
}
|
||||
|
||||
/// Parse for one variant of:
|
||||
/// * `#[pallet::generate_store($vis trait Store)]`
|
||||
/// * `#[pallet::generate_storage_info]`
|
||||
/// * `#[pallet::storage_version(STORAGE_VERSION)]`
|
||||
pub enum PalletStructAttr {
|
||||
GenerateStore { span: proc_macro2::Span, vis: syn::Visibility, keyword: keyword::Store },
|
||||
GenerateStorageInfoTrait(proc_macro2::Span),
|
||||
StorageVersion { storage_version: syn::Path, span: proc_macro2::Span },
|
||||
}
|
||||
|
||||
impl PalletStructAttr {
|
||||
@@ -58,6 +63,7 @@ impl PalletStructAttr {
|
||||
match self {
|
||||
Self::GenerateStore { span, .. } => *span,
|
||||
Self::GenerateStorageInfoTrait(span) => *span,
|
||||
Self::StorageVersion { span, .. } => *span,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -83,6 +89,14 @@ impl syn::parse::Parse for PalletStructAttr {
|
||||
} else if lookahead.peek(keyword::generate_storage_info) {
|
||||
let span = content.parse::<keyword::generate_storage_info>()?.span();
|
||||
Ok(Self::GenerateStorageInfoTrait(span))
|
||||
} else if lookahead.peek(keyword::storage_version) {
|
||||
let span = content.parse::<keyword::storage_version>()?.span();
|
||||
|
||||
let version_content;
|
||||
syn::parenthesized!(version_content in content);
|
||||
let storage_version = version_content.parse::<syn::Path>()?;
|
||||
|
||||
Ok(Self::StorageVersion { storage_version, span })
|
||||
} else {
|
||||
Err(lookahead.error())
|
||||
}
|
||||
@@ -104,6 +118,7 @@ impl PalletStructDef {
|
||||
|
||||
let mut store = None;
|
||||
let mut generate_storage_info = None;
|
||||
let mut storage_version_found = None;
|
||||
|
||||
let struct_attrs: Vec<PalletStructAttr> = helper::take_item_pallet_attrs(&mut item.attrs)?;
|
||||
for attr in struct_attrs {
|
||||
@@ -116,6 +131,11 @@ impl PalletStructDef {
|
||||
{
|
||||
generate_storage_info = Some(span);
|
||||
}
|
||||
PalletStructAttr::StorageVersion { storage_version, .. }
|
||||
if storage_version_found.is_none() =>
|
||||
{
|
||||
storage_version_found = Some(storage_version);
|
||||
}
|
||||
attr => {
|
||||
let msg = "Unexpected duplicated attribute";
|
||||
return Err(syn::Error::new(attr.span(), msg))
|
||||
@@ -138,6 +158,14 @@ impl PalletStructDef {
|
||||
let mut instances = vec![];
|
||||
instances.push(helper::check_type_def_gen_no_bounds(&item.generics, item.ident.span())?);
|
||||
|
||||
Ok(Self { index, instances, pallet, store, attr_span, generate_storage_info })
|
||||
Ok(Self {
|
||||
index,
|
||||
instances,
|
||||
pallet,
|
||||
store,
|
||||
attr_span,
|
||||
generate_storage_info,
|
||||
storage_version: storage_version_found,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user