parseRules function
Map<String, List<RuleWithOptions> >
parseRules(
- Map<
String, String> rules, - 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;
}