From Rust point of view, if you have to write these signatures, something may be off with your architecture. I.e. this is a thing that needs to be mutated from multiple threads, abstracted by a virtual table, and be nullable. And for some reason, this is an exclusive borrow to such pointer. It’s likely that removing any of these constraints would make a positive impact on the architecture.