remove the fn

This commit is contained in:
Tadeo hepperle
2024-03-18 16:27:08 +01:00
parent 793da7e29d
commit 888c35e49f
2 changed files with 1 additions and 40 deletions
+1 -1
View File
@@ -44,7 +44,7 @@ impl RuntimeGenerator {
///
/// Supported versions: v14 and v15.
pub fn new(mut metadata: Metadata) -> Self {
metadata.ensure_unique_type_paths();
scale_typegen::utils::ensure_unique_type_paths(metadata.types_mut());
RuntimeGenerator { metadata }
}
-39
View File
@@ -171,45 +171,6 @@ impl Metadata {
&OuterEnumHashes::empty(),
))
}
/// Ensure that every unique type we'll be generating or referring to also has a
/// unique path, so that types with matching paths don't end up overwriting each other
/// in the codegen. We ignore any types with generics; Subxt actually endeavours to
/// de-duplicate those into single types with a generic.
pub fn ensure_unique_type_paths(&mut self) {
let mut visited_path_counts = HashMap::<Vec<String>, usize>::new();
for ty in self.types.types.iter_mut() {
// Ignore types without a path (ie prelude types).
if ty.ty.path.namespace().is_empty() {
continue;
}
let has_valid_type_params = ty.ty.type_params.iter().any(|tp| tp.ty.is_some());
// Ignore types which have generic params that the type generation will use.
// Ordinarily we'd expect that any two types with identical paths must be parameterized
// in order to share the path. However scale-info doesn't understand all forms of generics
// properly I think (eg generics that have associated types that can differ), and so in
// those cases we need to fix the paths for Subxt to generate correct code.
if has_valid_type_params {
continue;
}
// Count how many times we've seen the same path already.
let visited_count = visited_path_counts
.entry(ty.ty.path.segments.clone())
.or_default();
*visited_count += 1;
// alter the type so that if it's been seen more than once, we append a number to
// its name to ensure that every unique type has a unique path, too.
if *visited_count > 1 {
if let Some(name) = ty.ty.path.segments.last_mut() {
*name = alloc::format!("{name}{visited_count}");
}
}
}
}
}
/// Metadata for a specific pallet.