Skip to content

Commit fb20b01

Browse files
committed
Backport #2015
1 parent b34e449 commit fb20b01

File tree

4 files changed

+26
-3
lines changed

4 files changed

+26
-3
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cli/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ chain-spec-pruning = ["smoldot"]
2727

2828
[dependencies]
2929
subxt-codegen = { workspace = true }
30+
scale-typegen = { workspace = true }
3031
subxt-utils-fetchmetadata = { workspace = true, features = ["url"] }
3132
subxt-metadata = { workspace = true }
3233
subxt = { workspace = true, features = ["default"] }

cli/src/commands/codegen.rs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,8 +210,18 @@ fn codegen(
210210
codegen.no_docs()
211211
}
212212

213-
let metadata = subxt_metadata::Metadata::decode(&mut &*metadata_bytes)
214-
.map_err(|e| eyre!("Cannot decode the provided metadata: {e}"))?;
213+
let metadata = {
214+
let mut metadata = subxt_metadata::Metadata::decode(&mut &*metadata_bytes)
215+
.map_err(|e| eyre!("Cannot decode the provided metadata: {e}"))?;
216+
217+
// Run this first to ensure type paths are unique (which may result in 1,2,3 suffixes being added
218+
// to type paths), so that when we validate derives/substitutions below, they are allowed for such
219+
// types. See <https://github.com/paritytech/subxt/issues/2011>.
220+
scale_typegen::utils::ensure_unique_type_paths(metadata.types_mut())
221+
.expect("ensure_unique_type_paths should not fail; please report an issue.");
222+
223+
metadata
224+
};
215225

216226
// Configure derives:
217227
let global_derives = raw_derives

macro/src/lib.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,17 @@ fn subxt_inner(args: TokenStream, item_mod: syn::ItemMod) -> Result<TokenStream,
102102
.map_err(|e| TokenStream::from(e.write_errors()))?;
103103

104104
// Fetch metadata first, because we need it to validate some of the chosen codegen options.
105-
let metadata = fetch_metadata(&args)?;
105+
let metadata = {
106+
let mut metadata = fetch_metadata(&args)?;
107+
108+
// Run this first to ensure type paths are unique (which may result in 1,2,3 suffixes being added
109+
// to type paths), so that when we validate derives/substitutions below, they are allowed for such
110+
// types. See <https://github.com/paritytech/subxt/issues/2011>.
111+
scale_typegen::utils::ensure_unique_type_paths(metadata.types_mut())
112+
.expect("ensure_unique_type_paths should not fail; please report an issue.");
113+
114+
metadata
115+
};
106116

107117
let mut codegen = CodegenBuilder::new();
108118

@@ -135,6 +145,7 @@ fn subxt_inner(args: TokenStream, item_mod: syn::ItemMod) -> Result<TokenStream,
135145
.into_iter()
136146
.collect(),
137147
);
148+
138149
for d in args.derive_for_type {
139150
validate_type_path(&d.path.path, &metadata);
140151
codegen.add_derives_for_type(d.path, d.derive.into_iter(), d.recursive);

0 commit comments

Comments
 (0)