DebtCostConfig.fromYaml constructor

DebtCostConfig.fromYaml(
  1. Map<String, dynamic> yaml
)

Create configuration from YAML map.

Implementation

factory DebtCostConfig.fromYaml(Map<String, dynamic> yaml) {
  final defaults = DebtCostConfig.defaults();

  final costsYaml = yaml['costs'] as Map<String, dynamic>?;
  final costs = Map<DebtType, double>.from(defaults.costs);

  if (costsYaml != null) {
    for (final entry in costsYaml.entries) {
      final debtType = _parseDebtType(entry.key);
      if (debtType != null && entry.value is num) {
        costs[debtType] = (entry.value as num).toDouble();
      }
    }
  }

  final multipliersYaml = yaml['multipliers'] as Map<String, dynamic>?;
  final multipliers = Map<DebtSeverity, double>.from(defaults.multipliers);

  if (multipliersYaml != null) {
    for (final entry in multipliersYaml.entries) {
      final severity = _parseSeverity(entry.key);
      if (severity != null && entry.value is num) {
        multipliers[severity] = (entry.value as num).toDouble();
      }
    }
  }

  final metricsYaml = yaml['metrics'] as Map<String, dynamic>?;
  final metricsThresholds = metricsYaml != null
      ? DebtMetricsThresholds.fromYaml(metricsYaml)
      : defaults.metricsThresholds;

  final excludeYaml = yaml['exclude'] as List<dynamic>?;
  final exclude =
      excludeYaml?.map((e) => e.toString()).toList() ?? defaults.exclude;

  return DebtCostConfig(
    costs: costs,
    multipliers: multipliers,
    unit: yaml['unit'] as String? ?? defaults.unit,
    threshold: (yaml['threshold'] as num?)?.toDouble() ?? defaults.threshold,
    metricsThresholds: metricsThresholds,
    exclude: exclude,
  );
}