guard<T> function
Guards an async action:
- Runs
action - On success: returns
Ok(value)and invokesonSuccess - On error: normalizes to
BaseException, reports via client, returnsErr(e), and invokesonError.
Implementation
Future<Result<T, BaseException>> guard<T>(
Future<T> Function() action, {
String? source,
FutureOr<void> Function(T value)? onSuccess,
FutureOr<void> Function(BaseException e)? onError,
bool manual = false,
Map<String, dynamic> additionalContext = const {},
}) async {
try {
final value = await action();
if (onSuccess != null) await onSuccess(value);
return Ok<T, BaseException>(value);
} catch (error, stack) {
final normalized = normalizeError(
error,
stack,
source: source,
);
if (onError != null) await onError(normalized);
await BugReportClient.instance.captureSafely(
normalized,
manual: manual,
additionalContext: additionalContext,
);
return Err<T, BaseException>(normalized);
}
}