Fix codegen for codec::Compact as type parameters (#651)

* Add failing test for compact generic parameter

* WIP refactor type generation

* Fmt

* Remove deprecated rustfmt optionns

* Remove license template path

* Update parent type parameter visitor

* Introduce different methods for generating a type path for a field

* Add comment

* Fix weights refs

* Add extra compact test cases

* Fmt
This commit is contained in:
Andrew Jones
2022-09-21 10:03:47 +01:00
committed by GitHub
parent 033ceb246f
commit 3bf7ddc18c
8 changed files with 310 additions and 172 deletions
+1 -1
View File
@@ -58,7 +58,7 @@ pub fn generate_constants(
let constant_hash = subxt_metadata::get_constant_hash(metadata, pallet_name, constant_name)
.unwrap_or_else(|_| abort_call_site!("Metadata information for the constant {}_{} could not be found", pallet_name, constant_name));
let return_ty = type_gen.resolve_type_path(constant.ty.id(), &[]);
let return_ty = type_gen.resolve_type_path(constant.ty.id());
let docs = &constant.docs;
quote! {
+1 -1
View File
@@ -69,7 +69,7 @@ pub fn generate_events(
}
}
});
let event_type = type_gen.resolve_type_path(event.ty.id(), &[]);
let event_type = type_gen.resolve_type_path(event.ty.id());
let event_ty = type_gen.resolve_type(event.ty.id());
let docs = event_ty.docs();
+3 -3
View File
@@ -101,7 +101,7 @@ fn generate_storage_entry_fns(
.enumerate()
.map(|(i, f)| {
let field_name = format_ident!("_{}", syn::Index::from(i));
let field_type = type_gen.resolve_type_path(f.id(), &[]);
let field_type = type_gen.resolve_type_path(f.id());
(field_name, field_type)
})
.collect::<Vec<_>>();
@@ -142,7 +142,7 @@ fn generate_storage_entry_fns(
(fields, key_impl)
}
_ => {
let ty_path = type_gen.resolve_type_path(key.id(), &[]);
let ty_path = type_gen.resolve_type_path(key.id());
let fields = vec![(format_ident!("_0"), ty_path)];
let hasher = hashers.get(0).unwrap_or_else(|| {
abort_call_site!("No hasher found for single key")
@@ -173,7 +173,7 @@ fn generate_storage_entry_fns(
StorageEntryType::Plain(ref ty) => ty,
StorageEntryType::Map { ref value, .. } => value,
};
let storage_entry_value_ty = type_gen.resolve_type_path(storage_entry_ty.id(), &[]);
let storage_entry_value_ty = type_gen.resolve_type_path(storage_entry_ty.id());
let docs = &storage_entry.docs;
let docs_token = quote! { #( #[doc = #docs ] )* };