validate method

ValidasiResult<T> validate(
  1. TInput? value
)

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,
  );
}