mirror of
https://github.com/bevyengine/bevy
synced 2024-09-19 22:11:59 +00:00
fcfa60844a
`ShortName` is lazily evaluated and does not allocate, instead providing `Display` and `Debug` implementations which write directly to a formatter using the original algorithm. When using `ShortName` in format strings (`panic`, `dbg`, `format`, etc.) you can directly use the `ShortName` type. If you require a `String`, simply call `ShortName(...).to_string()`. # Objective - Remove the requirement for allocation when using `get_short_name` ## Solution - Added new type `ShortName` which wraps a name and provides its own `Debug` and `Display` implementations, using the original `get_short_name` algorithm without the need for allocating. - Removed `get_short_name`, as `ShortName(...)` is more performant and ergonomic. - Added `ShortName::of::<T>` method to streamline the common use-case for name shortening. ## Testing - CI ## Migration Guide ### For `format!`, `dbg!`, `panic!`, etc. ```rust // Before panic!("{} is too short!", get_short_name(name)); // After panic!("{} is too short!", ShortName(name)); ``` ### Need a `String` Value ```rust // Before let short: String = get_short_name(name); // After let short: String = ShortName(name).to_string(); ``` ## Notes `ShortName` lazily evaluates, and directly writes to a formatter via `Debug` and `Display`, which removes the need to allocate a `String` when printing a shortened type name. Because the implementation has been moved into the `fmt` method, repeated printing of the `ShortName` type may be less performant than converting it into a `String`. However, no instances of this are present in Bevy, and the user can get the original behaviour by calling `.to_string()` at no extra cost. --------- Co-authored-by: Gino Valente <49806985+MrGVSV@users.noreply.github.com> |
||
---|---|---|
.. | ||
bevy_a11y | ||
bevy_animation | ||
bevy_app | ||
bevy_asset | ||
bevy_audio | ||
bevy_color | ||
bevy_core | ||
bevy_core_pipeline | ||
bevy_derive | ||
bevy_dev_tools | ||
bevy_diagnostic | ||
bevy_dylib | ||
bevy_ecs | ||
bevy_encase_derive | ||
bevy_gilrs | ||
bevy_gizmos | ||
bevy_gltf | ||
bevy_hierarchy | ||
bevy_input | ||
bevy_internal | ||
bevy_log | ||
bevy_macro_utils | ||
bevy_math | ||
bevy_mikktspace | ||
bevy_pbr | ||
bevy_picking | ||
bevy_ptr | ||
bevy_reflect | ||
bevy_render | ||
bevy_scene | ||
bevy_sprite | ||
bevy_state | ||
bevy_tasks | ||
bevy_text | ||
bevy_time | ||
bevy_transform | ||
bevy_ui | ||
bevy_utils | ||
bevy_window | ||
bevy_winit |