Expand description
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 incoreis unstable.
Structs§
- Replace
Display - A type to lazily replace strings in any type that implements
Display - Replace
Writer - A wrapper around a
fmt::Writethat does string replacement on anything that is written to it before passing it to the underlying writer. - Replaced
String - A lazily-replaced string - no work is done until you call
.to_string()or useformat!/write!and friends. This is useful when, for example, doingformat!("( {} )", my_string.replace(needle, some_replacement). Since it uses aDisplayfor 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 theDisplayresult, which in turn would require allocation. A memoizingDisplaywrapper is out of scope for this crate.
Traits§
- Lazy
Replace - A convenience trait to allow you to call
.lazy_replaceon anything that can deref to a&str. - Lazy
Replace Display - A convenience trait to allow you to call
.replace_displayon anything that implementsfmt::Display.