Module napi_h::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 thaterror
entity as the first parameter of the callback; -
Otherwise (in case of
Ok(_)
), feednull
instead.
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 enum
s, 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