I'd like to use EdgeDB with tokio, but the client is created with async-std (a tokio version is planned).
I did some testing by importing the client and using it from within tokio and it seems to work.
However, I'm wondering if I could get into any troubles doing it this way. For example, it seems, if you want to go the opposite route, you have to use a compatibility layer (mostly because tokio is implemented in a certain way, it seems).
If doing it this way isn't recommended, how else could I use EdgeDB?
I don't care about performance, and I can live with pulling in async-std (for now). What I care most about, is ergonomics. So running async-std in a separate thread (and communicating with it via channels) wouldn't be great.
The async-std runtime is always global. This has some disadvantages (e.g. impossible to have multiple runtimes), but for your use-case it works out quite nicely. Any use of async-std primitives inside the Tokio runtime will be able to find the async-std runtime by looking at a global variable inside async-std.
The main place where something could go wrong is if you spawn something on the async-std runtime, as Tokio primitives wont be able to find the Tokio runtime from inside the async-std runtime.
Also thanks, for answering most of my questions. I think you are a great example to point to, when mentioning somewhere how amazing the Rust community is!