Crate reqwest_cross
source ·Expand description
§reqwest-cross
The reqwest-cross
crate (inspired by ehttp) provides a
wrapper around reqwest for ease of use in applications that
target BOTH native and wasm and do not want to block in the calling
task/thread, for example in a UI task/thread or game loop. This is achieved
by using callbacks. NOTE: At least 1 feature flag for
native MUST be set to choose which runtime to use. Currently only Tokio is
supported but if you want to use another runtime please open an issue on
github and we’d be happy to add it. To communicate between the callback and
the caller you can use various approaches such as:
- channels (used in examples)
Arc<Mutex<_>>
- promises and so on.
§Examples
For examples of how to use this crate see fetch
§Feature Flags
Exactly 1 of the “native-*” flags MUST be enabled to select which runtime to
use for native. If one of the other options needs to be used instead of
tokio then defaults must be disabled. For example: reqwest-cross = { version = "*", default-features = false, features = ["native-async-std"] }
(The feature in this example does not exist at this time, only used for
demonstration purposes).
- native-tokio: Sets tokio as the runtime to use for native. (Default)
§Tradeoffs
Exposing underlying framework that actually sends the requests: The currently selected approach of exposing and using reqwest::RequestBuilder is much more flexible than the fully isolated approach used by ehttp and is generally desirable as it allows for reuse of the same reqwest::Client as recommended by reqwest.However, since reqwest::Client is asynchronous it requires an available runtime. For wasm the spawning of the futures is handled by wasm-bindgen-futures but for local which runtime is specified using feature flags. If the one you want is not listed please create an issue and I’ll attempt to add it.
§How to run tokio on “secondary” thread
If you want to use the main thread for your UI and need to run tokio on a “secondary” thread I found this example helpful. I found it in this discussion, which had other suggested examples as well.
Structs§
- An asynchronous
Client
to make Requests with.
Functions§
- Performs a HTTP requests and calls the given callback when done. NB: Needs to use a callback to prevent blocking on the thread that initiates the fetch. Note: Instead of calling get like in the example you can use post, put, etc. (See reqwest::Client). Also see the examples folder for more complete examples.