The difficulty is that Store, the sqlite database that BridgeDescMgr uses, is buried within DirMgr. But there may not even be a DirMgr, since we support a replaceable DirProvider via DirProviderBuilder.
Logically, a replaced DirProvider ought to still leave us with a Store for other purposes. But we don't want to make the whole of the Store part of our stable API.
I propose therefore to do this:
Make a public trait DirMgrStore which has the private Store as a supertrait. (So DirMgrStore is sealed.)
Make DynStore use dyn DirMgrStore. There might have to be DynCast or something; at least there will have to be an as_ref impl.
Move creating the Store to TorClient and have DirProviderBuilder take a DynStore.
Change BridgeDescMgr to take the things it needs directly, replacing new_with_dirmgr with new.
This makes sense to me! This should help out future refactorings of the downloading code, too; currently a lot of that takes a DirMgr where it could just take a Store instead, so it'll be even nicer if that's a more abstract trait.