Not sure if this is a good place to bring this up, or if it should be a separate thread, but one of the big limitations of the Borrow and ToOwned pattern today is it predates GATs and can't work with newtypes that wrap &'a T as MyNewtype<'a>. And unfortunately as there's no way to safely construct a &'a MyNewtype from &'a T, that means trying to make the Borrow/ToOwned pattern work (so you can use Cow) with custom newtypes pretty much requires unsafe code.
However, you can define a pair of traits built on GATs that can support both the Borrow pattern and custom newtype structs that take a lifetime, e.g. RefToOwned and OwnedToRef. It would be nice if there were traits that were this flexible that could also work with Cow.