formatForUI static method
Process rules result keeping raw format and adding organized arrays
Implementation
static Map<String, dynamic> formatForUI(
dynamic rulesResult, {
bool includeTimestamp = true,
bool includeRawResult = true,
String? customMessage,
}) {
// Handle null case
if (rulesResult == null) {
return {
'success': false,
'error': 'No result provided',
'tags': <Map<String, dynamic>>[],
'variables': <Map<String, dynamic>>[],
'actions': <Map<String, dynamic>>[],
'metrics': <Map<String, dynamic>>[],
if (includeTimestamp)
'timestamp': DateTime.now().millisecondsSinceEpoch,
};
}
// If it's a RulesResult object, use its built-in toMap() method
if (rulesResult.runtimeType.toString().contains('RulesResult')) {
final baseMap = rulesResult.toMap();
// Add extra fields as needed
if (includeTimestamp) {
baseMap['timestamp'] = DateTime.now().millisecondsSinceEpoch;
}
if (includeRawResult && rulesResult.rawResult != null) {
baseMap['rawResult'] = rulesResult.rawResult;
}
if (customMessage != null) {
baseMap['message'] = customMessage;
}
return baseMap;
}
// If it's already a Map (rawResult), handle different formats
if (rulesResult is Map) {
// Convert any Map type (including IdentityMap) to Map<String, dynamic>
final cleanMap = Map<String, dynamic>.from(rulesResult);
return _formatFromRawMap(
cleanMap,
includeTimestamp: includeTimestamp,
includeRawResult: includeRawResult,
customMessage: customMessage,
);
}
// Fallback - convert to string representation
return {
'success': false,
'error': 'Unknown result format: ${rulesResult.runtimeType}',
'rawResult': rulesResult.toString(),
'tags': <Map<String, dynamic>>[],
'variables': <Map<String, dynamic>>[],
'actions': <Map<String, dynamic>>[],
'metrics': <Map<String, dynamic>>[],
if (includeTimestamp) 'timestamp': DateTime.now().millisecondsSinceEpoch,
};
}