Our objective is to make this extremely versatile and universal.
Be careful with that. As eXpl0it3r mentioned, with genericity comes complexity. If you begin to support different ownership models, your class can quickly become very unintuitive and tricky to use.
thor::ResourceCache is not particularly difficult to use, since its semantics are quite clear (there's only the shared ownership model), but you need already a lot of code to use it in standard scenarios.
If I were you I'd start simple and add features only if they actually add value without complicating the API. Don't build a
god class that attempts to solve everything