parseRules function

Map<String, List<RuleWithOptions>> parseRules(
  1. Map<String, String> rules,
  2. ValidationRuleRegistry registry
)

Parses a map of string rules into a structured format.

The input rules map contains field names as keys and rule strings as values. Each rule string can contain multiple rules separated by '|', and each rule can have options separated by ':'.

Uses registry to resolve rule factories by name.

Returns a map where each field name is associated with a list of RuleWithOptions.

Implementation

Map<String, List<RuleWithOptions>> parseRules(
  Map<String, String> rules,
  ValidationRuleRegistry registry,
) {
  final parsedRules = <String, List<RuleWithOptions>>{};

  rules.forEach((field, ruleString) {
    final ruleParts = ruleString.split('|');
    final List<RuleWithOptions> fieldRules = [];

    for (final part in ruleParts) {
      final ruleAndOptions = part.split(':');
      final ruleName = ruleAndOptions[0];
      final options = ruleAndOptions.length > 1
          ? ruleAndOptions[1].split(',')
          : null;

      final factory = registry.resolve(ruleName);
      if (factory != null) {
        fieldRules.add((rule: factory(), options: options));
      } else {
        throw Exception('Unknown validation rule: $ruleName');
      }
    }

    parsedRules[field] = fieldRules;
  });

  return parsedRules;
}