safe<T> static method
T?
safe<
T>( - T operation(), {
- String? operationName,
- 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;
}
}