sync15_traits::Store::prepare_for_sync is an unfortunate hack to support the tabs engine
It requires the sync15_traits crate to include a large amount of unnecessary API surface. It exists just to support the tabs engine's dependence on the clients engine, we should think of another way that allows us to avoid this. The main obvious way around this -- keep prepare_to_sync, but have it pass a JSON object instead -- seems just as unsatisfying.
The way we'd handle this in other languages is by having an extension to sync15_traits::Store that includes this, and conditionally downcast to it -- this doesn't work since you can't downcast from dyn Foo to dyn Bar even if trait Bar: Foo. At least, not without unsafe glue, which would probably require Bar and Foo to be defined together, defeating the point. Anyway, for now just filing an issue.
┆Issue is synchronized with this Jira Task ┆epic: Tabs improvements