serde_derive_internals: Unicode-aware camelCase first-char lowering #2996
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.
Problem
#[serde(rename_all = "camelCase")]
could panic when a field orvariant name begins with a non-ASCII character. The cause was byte
slicing (
[..1]
) on a UTF-8 string before lowercasing the firstcharacter. Examples include:
İstanbul
(U+0130) and other multi-bytescalars.
Fix
Replace byte-slicing with Unicode-aware lowering of the first Unicode
scalar using
char::to_lowercase()
, then append the remainder. Thishandles multi-scalar mappings (e.g.,
İ
->i
+ U+0307) and avoidsUTF-8 boundary panics. Updated both CamelCase arms in
apply_to_variant
andapply_to_field
.Compatibility
ASCII behavior is unchanged. Only the first scalar is lowercased (same
camelCase strategy as before). The change is confined to derive-time
rename logic.
Tests
İstanbul
->i\u{307}stanbul
.परियोजनाName
.All crate and workspace tests pass locally.
Closes: #2953