When some functions require Arc<Self> due to tokio::task::spawn_blocking, what's the best practice?

In my code I need spawn_blocking because of this:

Maybe I should consider this to be an (ugly) implementation detail and go for variant 5. But in the particular case, it will be a private module, so I don't need to care for a clean/stable API.


Anyway, I believe that in Rust it's usualluy idiomatic to expose the question whether an Arc is needed/consumed/created to the user of an API.