RulesResult.fromMap constructor

RulesResult.fromMap(
  1. Map<String, dynamic> mapResult, {
  2. dynamic rawResult,
})

Creates a result from map data

Implementation

factory RulesResult.fromMap(Map<String, dynamic> mapResult,
    {dynamic rawResult}) {
  if (mapResult.containsKey('error')) {
    return RulesResult.error(mapResult['error'].toString());
  }

  final tags = <TagResult>[];
  final variables = <VariableResult>[];
  final actions = <ActionResult>[];
  final metrics = <MetricResult>[];

  // Engine produces modern array format, just convert to typed objects
  void addFromList<T>(List<T> target, List? source,
      T? Function(Map<String, dynamic>) create) {
    if (source is List) {
      for (final item in source) {
        if (item is Map<String, dynamic>) {
          try {
            final result = create(item);
            if (result != null) {
              target.add(result);
            }
          } catch (_) {
            // Skip malformed items
          }
        }
      }
    }
  }

  addFromList(tags, mapResult['tags'], (data) => TagResult.tryFromMap(data));
  addFromList(variables, mapResult['variables'],
      (data) => VariableResult.tryFromMap(data));
  addFromList(
      actions, mapResult['actions'], (data) => ActionResult.tryFromMap(data));
  addFromList(
      metrics, mapResult['metrics'], (data) => MetricResult.tryFromMap(data));

  return RulesResult(
    tags: tags,
    variables: variables,
    actions: actions,
    metrics: metrics,
    rawResult: rawResult,
  );
}