Module napi::threadsafe_function::ErrorStrategy
source · Expand description
Type-level enum to express how to feed ThreadsafeFunction errors to
the inner [JsFunction].
Context
For callbacks that expect a Result-like kind of input, the convention is
to have the callback take an error parameter as its first parameter.
This way receiving a Result<Args…> can be modelled as follows:
-
In case of
Err(error), feed thaterrorentity as the first parameter of the callback; -
Otherwise (in case of
Ok(_)), feednullinstead.
In pseudo-code:
match result_args {
Ok(args) => {
let js_null = /* … */;
callback.call(
// this
None,
// args…
&iter::once(js_null).chain(args).collect::<Vec<_>>(),
)
},
Err(err) => callback.call(None, &[JsError::from(err)]),
}Note that the Err case can stem from a failed conversion from native
values to js values when calling the callback!
That’s why:
This is the default error strategy.
In order to opt-out of it, ThreadsafeFunction has an optional second
generic parameter (of “kind” ErrorStrategy::T) that defines whether
this behavior (ErrorStrategy::CalleeHandled) or a non-Result one
(ErrorStrategy::Fatal) is desired.
Type-level enum
Until const_generics can handle custom enums, this pattern must be
implemented at the type level.
We thus end up with:
#[type_level_enum]
enum ErrorStrategy {
CalleeHandled,
Fatal,
}With ErrorStrategy::T being the type-level “enum type”:
<Param: ErrorStrategy::T>Re-exports
pub use ErrorStrategy as T;
Enums
- Input errors (including conversion errors) are left for the callee to handle:
- Input errors (including conversion errors) are deemed fatal:
Traits
- See
ErrorStrategy