diff options
author | Luca Bruno <lucab@lucabruno.net> | 2023-03-13 11:29:05 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-13 10:29:05 +0000 |
commit | 3f26ee86048243e71a6616b1c1b3879dffabc01a (patch) | |
tree | e8de78fdd9012deb1860f74ba6dd1320f9af848c /ext/fetch/lib.rs | |
parent | e5673f5ed85774831234fe70290d5802bbd47c15 (diff) |
feat(ext/fetch): support fallible request-builder hooks (#18116)
This tweaks the signature of `request_builder_hook` in order to support
fallible hooks.
The rationale for this is mostly on two sides:
* it allows a hook to inspect and possibly drop an outgoing request
(e.g. for policying purposes), bubbling up a detailed error message to
the user.
* it wires into newer `reqwest` API which allows to split and then
reassemble a `RequestBuilder`, although only in a fallible way
(https://github.com/seanmonstar/reqwest/pull/1770)
Diffstat (limited to 'ext/fetch/lib.rs')
-rw-r--r-- | ext/fetch/lib.rs | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/ext/fetch/lib.rs b/ext/fetch/lib.rs index 75f72233e..20885dda5 100644 --- a/ext/fetch/lib.rs +++ b/ext/fetch/lib.rs @@ -72,7 +72,8 @@ pub struct Options { pub user_agent: String, pub root_cert_store: Option<RootCertStore>, pub proxy: Option<Proxy>, - pub request_builder_hook: Option<fn(RequestBuilder) -> RequestBuilder>, + pub request_builder_hook: + Option<fn(RequestBuilder) -> Result<RequestBuilder, AnyError>>, pub unsafely_ignore_certificate_errors: Option<Vec<String>>, pub client_cert_chain_and_key: Option<(String, String)>, pub file_fetch_handler: Rc<dyn FetchHandler>, @@ -342,7 +343,8 @@ where let options = state.borrow::<Options>(); if let Some(request_builder_hook) = options.request_builder_hook { - request = request_builder_hook(request); + request = request_builder_hook(request) + .map_err(|err| type_error(err.to_string()))?; } let cancel_handle = CancelHandle::new_rc(); |