validate method

ValidationResult validate({
  1. required Credential<Claim> credential,
  2. required DcqlQuery query,
  3. required int credentialIndex,
})

Implementation

ValidationResult validate({
  required Credential credential,
  required DcqlQuery query,
  required int credentialIndex,
}) {
  if (credential.claims == null) {
    return ValidationResult.valid();
  }

  if (credential.claims != null) {
    final seenIds = <String>{};

    for (var j = 0; j < credential.claims!.length; j++) {
      final claim = credential.claims![j];
      final contextPath = 'query.credentials[$credentialIndex].claims[$j]';

      if (claim.id != null) {
        if (seenIds.contains(claim.id)) {
          return ValidationResult.invalid(
            contextPath: '$contextPath.id',
            errors: ['Duplicate claim ID "${claim.id}" found'],
          );
        }
        seenIds.add(claim.id!);
      }

      final idValidationResult = validateId(credential, claim, contextPath);
      if (!idValidationResult.isValid) return idValidationResult;

      final pathValidationResult = validatePath(claim.path, '$contextPath.path');
      if (!pathValidationResult.isValid) return pathValidationResult;

      final valuesValidationResult = validateValues(claim.values, '$contextPath.values');
      if (!valuesValidationResult.isValid) return valuesValidationResult;
    }
  }

  return ValidationResult.valid();
}