Struct ReusableString

Source
pub struct ReusableString { /* private fields */ }
Expand description

A wrapper around String that allows for reusing its allocation.

This is particularly useful in loops where strings are built and discarded, as it helps to avoid frequent memory allocations. When the guard returned by recycle is dropped, the String is cleared, but its capacity is retained.

§Examples

use triple_r::ReusableString;

let mut reusable_string = ReusableString::default();
let mut last_capacity = 0;

for i in 0..3 {
    let mut string_guard = reusable_string.recycle();
    assert!(string_guard.is_empty());
    assert_eq!(string_guard.capacity(), last_capacity);

    string_guard.push_str("hello world");
    last_capacity = string_guard.capacity();
}

let final_guard = reusable_string.recycle();
assert!(final_guard.is_empty());
assert_eq!(final_guard.capacity(), last_capacity);

Implementations§

Source§

impl ReusableString

Source

pub fn recycle<'parent>(&'parent mut self) -> ReusableStringGuard<'parent>

Reuses the String’s allocation, returning a guard for temporary access.

The &mut self requirement ensures that only one guard can be active at a time.

Trait Implementations§

Source§

impl Debug for ReusableString

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for ReusableString

Source§

fn default() -> Self

Creates a new, empty ReusableString.

Source§

impl Send for ReusableString

Source§

impl Sync for ReusableString

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.