RFC: Implement CowUtils on Cow<str> itself to enable chaining #5
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.
Chaining multiple calls to
CowUtils
methods will currently yield results tied to temporary lifetimes because intermediateCow<'s, str>
will be borrowed as&'a str
via&'a Cow<'s, str>
thereby loosing the original lifetime's
.By implementing
CowUtils
forCow<str>
we can chain the source lifetime through the calls at the cost of returning an ownedCow::Owned(String)
instead of a borrow&'a str
if a previous operation modified the source value, i.e. the calls in a chain will either all borrow or stop to completey at some point.Another cost is that to handle short-lived references to owned values, the trait itself must be extended to require a
Pattern
impl for any lifetime, not just the given source lifetime. I don't think this is usually an issue, but it does require a HRTB and is really only necessary for chaining.So in the end, I am not completely sure whether the design changes proposed here are really worth it, hence the RFC marker.