mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 01:11:10 +00:00
Upgrade to syn 2.0 (#875)
* WIP updating to syn 2.0.0 * WIP darling compat * Update darling and syn workspace deps * NestedMeta::parse_meta_list * Rename attribute keyword type property to path * Fmt * Update more type to path * Unused darling * Cargo.lock * Add missing syn features
This commit is contained in:
+20
-14
@@ -31,7 +31,7 @@
|
||||
//! ```ignore
|
||||
//! #[subxt::subxt(
|
||||
//! runtime_metadata_path = "polkadot_metadata.scale",
|
||||
//! substitute_type(type = "sp_arithmetic::per_things::Perbill", with = "sp_runtime::Perbill")
|
||||
//! substitute_type(path = "sp_arithmetic::per_things::Perbill", with = "sp_runtime::Perbill")
|
||||
//! )]
|
||||
//! pub mod polkadot {}
|
||||
//! ```
|
||||
@@ -67,8 +67,8 @@
|
||||
//! #[subxt::subxt(
|
||||
//! runtime_metadata_path = "polkadot_metadata.scale",
|
||||
//! derive_for_all_types = "Eq, PartialEq",
|
||||
//! derive_for_type(type = "frame_support::PalletId", derive = "Ord, PartialOrd"),
|
||||
//! derive_for_type(type = "sp_runtime::ModuleError", derive = "Hash"),
|
||||
//! derive_for_type(path = "frame_support::PalletId", derive = "Ord, PartialOrd"),
|
||||
//! derive_for_type(path = "sp_runtime::ModuleError", derive = "Hash"),
|
||||
//! )]
|
||||
//! pub mod polkadot {}
|
||||
//! ```
|
||||
@@ -113,7 +113,7 @@ extern crate proc_macro;
|
||||
|
||||
use std::str::FromStr;
|
||||
|
||||
use darling::FromMeta;
|
||||
use darling::{ast::NestedMeta, FromMeta};
|
||||
use proc_macro::TokenStream;
|
||||
use proc_macro_error::{abort_call_site, proc_macro_error};
|
||||
use subxt_codegen::{utils::Uri, CodegenError, DerivesRegistry, TypeSubstitutes};
|
||||
@@ -158,29 +158,31 @@ struct RuntimeMetadataArgs {
|
||||
|
||||
#[derive(Debug, FromMeta)]
|
||||
struct DeriveForType {
|
||||
#[darling(rename = "type")]
|
||||
ty: syn::TypePath,
|
||||
path: syn::TypePath,
|
||||
derive: Punctuated<syn::Path, syn::Token![,]>,
|
||||
}
|
||||
|
||||
#[derive(Debug, FromMeta)]
|
||||
struct AttributesForType {
|
||||
#[darling(rename = "type")]
|
||||
ty: syn::TypePath,
|
||||
path: syn::TypePath,
|
||||
attributes: Punctuated<OuterAttribute, syn::Token![,]>,
|
||||
}
|
||||
|
||||
#[derive(Debug, FromMeta)]
|
||||
struct SubstituteType {
|
||||
#[darling(rename = "type")]
|
||||
ty: syn::Path,
|
||||
path: syn::Path,
|
||||
with: syn::Path,
|
||||
}
|
||||
|
||||
#[proc_macro_attribute]
|
||||
#[proc_macro_error]
|
||||
pub fn subxt(args: TokenStream, input: TokenStream) -> TokenStream {
|
||||
let attr_args = parse_macro_input!(args as syn::AttributeArgs);
|
||||
let attr_args = match NestedMeta::parse_meta_list(args.into()) {
|
||||
Ok(v) => v,
|
||||
Err(e) => {
|
||||
return TokenStream::from(darling::Error::from(e).write_errors());
|
||||
}
|
||||
};
|
||||
let item_mod = parse_macro_input!(input as syn::ItemMod);
|
||||
let args = match RuntimeMetadataArgs::from_list(&attr_args) {
|
||||
Ok(v) => v,
|
||||
@@ -205,11 +207,15 @@ pub fn subxt(args: TokenStream, input: TokenStream) -> TokenStream {
|
||||
);
|
||||
|
||||
for derives in &args.derive_for_type {
|
||||
derives_registry.extend_for_type(derives.ty.clone(), derives.derive.iter().cloned(), vec![])
|
||||
derives_registry.extend_for_type(
|
||||
derives.path.clone(),
|
||||
derives.derive.iter().cloned(),
|
||||
vec![],
|
||||
)
|
||||
}
|
||||
for attributes in &args.attributes_for_type {
|
||||
derives_registry.extend_for_type(
|
||||
attributes.ty.clone(),
|
||||
attributes.path.clone(),
|
||||
vec![],
|
||||
attributes.attributes.iter().map(|a| a.0.clone()),
|
||||
)
|
||||
@@ -223,7 +229,7 @@ pub fn subxt(args: TokenStream, input: TokenStream) -> TokenStream {
|
||||
let substitute_args_res: Result<(), _> = args.substitute_type.into_iter().try_for_each(|sub| {
|
||||
sub.with
|
||||
.try_into()
|
||||
.and_then(|with| type_substitutes.insert(sub.ty, with))
|
||||
.and_then(|with| type_substitutes.insert(sub.path, with))
|
||||
});
|
||||
|
||||
if let Err(err) = substitute_args_res {
|
||||
|
||||
Reference in New Issue
Block a user