fix(rust): resolve client name collisions in recursive subpackages #9868
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Linear ticket:
The PR fixes a client name collision issue in the Rust SDK generator, where recursive subpackages with similar names would generate conflicting client class names. For example,
folder_a/serviceandfolder_d/serviceboth tried to useServiceClient, andfolder_b/commonandfolder_c/commonboth tried to useCommonClient, causing compilation errors.The fix introduces a centralized client name registry that pre-registers all client names (root + subpackages) during initialization and applies numbered-suffix collision resolution (
ServiceClient→ServiceClient2→ServiceClient3).Changes Made
registerClientName()andgetClientName*()methods toRustFilenameRegistrywith numbered-suffix strategy for collision resolutionAbstractRustGeneratorContextto pre-register all client names (root + subpackages) during initialization phase (Priority 4)getClientName()andgetUniqueClientNameForSubpackage()to retrieve registered names from the registry instead of generating them on-the-flySdkGeneratorClito use registered client names for subpackage exportsTesting
ServiceClient→ServiceClient2,CommonClient→CommonClient2,BasicAuthClient→BasicAuthClient2