validate method
Implementation
ValidasiResult<T> validate(TInput? value) {
Object? processedValue = value;
if (preprocess != null) {
final result = preprocess!.tryTransform(processedValue);
if (!result.isValid) {
return ValidasiResult<T>.error(
ValidationError(
rule: 'Preprocess',
message: 'Failed to preprocess value',
details: {
'exception': result.error?.toString() ?? 'Unknown error',
},
),
);
}
processedValue = result.data;
}
if (processedValue is! T?) {
return ValidasiResult<T>.error(ValidationError(
rule: 'TypeCheck',
message: 'Expected type $T, got ${processedValue.runtimeType}',
details: {'value': processedValue},
));
}
final context = ValidationContext<T>(value: processedValue);
for (final rule in rules ?? <Rule<T>>[]) {
if (context.value == null && !rule.runOnNull) {
continue;
}
rule.apply(context);
if (context.isStopped) {
break;
}
}
return ValidasiResult<T>(
isValid: context.errors.isEmpty,
data: context.value,
errors: context.errors,
);
}