safe<T> static method

T? safe<T>(
  1. T operation(), {
  2. String? operationName,
  3. T? fallback,
})

Implementation

static T? safe<T>(
  T Function() operation, {
  String? operationName,
  T? fallback,
}) {
  final opName = operationName ?? 'unknown_operation';

  // Check circuit breaker first
  if (ObslyCircuitBreaker.isOpen(opName)) {
    ObslyLogger.debug('Circuit breaker open for $opName, returning fallback');
    return fallback;
  }

  try {
    ObslyLogger.verbose('🛡️ Executing defensive operation: $opName');
    final result = operation();
    ObslyCircuitBreaker.recordSuccess(opName);
    ObslyLogger.verbose('✅ Defensive operation successful: $opName');
    return result;
  } catch (e, stack) {
    ObslyCircuitBreaker.recordFailure(opName);

    // Enhanced error logging with context
    ObslyLogger.errorWithContext(
      'DefensiveExecution',
      'safe',
      'Defensive execution caught error in $opName: $e',
      stack,
      context: {
        'operationName': opName,
        'hasFallback': fallback != null,
        'fallbackType': fallback?.runtimeType.toString(),
        'circuitBreakerOpen': ObslyCircuitBreaker.isOpen(opName),
      },
    );

    return fallback;
  }
}