Codegen: enum variant indices (#308)

* fix: use metadata index in enum variants

* test: updated code gen test with enum index
This commit is contained in:
sander2
2021-11-03 17:55:09 +01:00
committed by GitHub
parent 793c945fbd
commit 06b26b4dfa
2 changed files with 10 additions and 1 deletions
+5
View File
@@ -312,8 +312,11 @@ fn generate_enum() {
use super::root;
#[derive(::subxt::codec::Encode, ::subxt::codec::Decode)]
pub enum E {
# [codec (index = 0)]
A,
# [codec (index = 1)]
B (::core::primitive::bool,),
# [codec (index = 2)]
C { a: ::core::primitive::u32, },
}
}
@@ -467,7 +470,9 @@ fn box_fields_enum() {
use super::root;
#[derive(::subxt::codec::Encode, ::subxt::codec::Decode)]
pub enum E {
# [codec (index = 0)]
A(::std::boxed::Box<::core::primitive::bool>,),
# [codec (index = 1)]
B { a: ::std::boxed::Box<::core::primitive::u32>, },
}
}
+5 -1
View File
@@ -139,7 +139,11 @@ impl<'a> quote::ToTokens for TypeDefGen<'a> {
} else {
self.composite_fields(v.fields(), &type_params, false)
};
variants.push(quote! { #variant_name #fields });
let index = proc_macro2::Literal::u8_unsuffixed(v.index());
variants.push(quote! {
#[codec(index = #index)]
#variant_name #fields
});
let unused_params_set = unused_type_params.iter().cloned().collect();
let used_params = type_params_set.difference(&unused_params_set);