One thing I’m not super clear on when it comes to this whole inter-procedural borrow checker interference with disjoint self borrows issue:
Does this typically happen when the fields being borrowed are already public? Or are they typically private?
Because if they’re private, then fn foo(&self.{bar, baz}) is solving the problem by putting private fields into your public API signatures. But if they’re already public, then it seems worth the hassle of breaking up the struct into multiple public types to make an explicit commitment to their disjointness.