[][src]Crate lazy_string_replace

This crate allows you to Display::fmt strings that include replacements, without actually doing any replacement until format-time and totally avoiding allocation.

This is useful when you do .replace and then immediately pass the result to format! - it will prevent the intermediate allocation from happening. You can even use the result in another .lazy_replace call and it will still avoid allocation, although it may do the inner replacement multiple times. The work of memoizing the result of Display::fmt to avoid duplicating work can be done in a generic way by an external crate and requires allocation, so is out of the scope of this crate.

Modules

pattern

A vendored version of core::str::pattern, since the version in core is unstable.

Structs

ReplaceDisplay

A type to lazily replace strings in any type that implements Display

ReplaceWriter

A wrapper around a fmt::Write that does string replacement on anything that is written to it before passing it to the underlying writer.

ReplacedString

A lazily-replaced string - no work is done until you call .to_string() or use format!/write! and friends. This is useful when, for example, doing format!("( {} )", my_string.replace(needle, some_replacement). Since it uses a Display for a replacement, you can even replace a string with a different lazily-replaced string, all without allocating. Of course, this will duplicate work when there is more than one match, but fixing this would require memoization of the Display result, which in turn would require allocation. A memoizing Display wrapper is out of scope for this crate.

Traits

LazyReplace

A convenience trait to allow you to call .lazy_replace on anything that can deref to a &str.

LazyReplaceDisplay

A convenience trait to allow you to call .replace_display on anything that implements fmt::Display.