guard<T> function

Future<Result<T, BaseException>> guard<T>(
  1. Future<T> action(), {
  2. String? source,
  3. FutureOr<void> onSuccess(
    1. T value
    )?,
  4. FutureOr<void> onError(
    1. BaseException e
    )?,
  5. bool manual = false,
  6. Map<String, dynamic> additionalContext = const {},
})

Guards an async action:

  • Runs action
  • On success: returns Ok(value) and invokes onSuccess
  • On error: normalizes to BaseException, reports via client, returns Err(e), and invokes onError.

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);
  }
}