validate method

ValidationResult validate(
  1. DcqlQuery query
)

Implementation

ValidationResult validate(DcqlQuery query) {
  if (query.credentialSets == null) {
    return ValidationResult.valid();
  }

  final validCredentialIds = query.credentials.map((c) => c.id).toSet();

  for (var i = 0; i < query.credentialSets!.length; i++) {
    final credentialSet = query.credentialSets![i];

    if (credentialSet.options.isEmpty) {
      return ValidationResult.invalid(
        contextPath: 'query.credential_sets[$i].options',
        errors: ['CredentialSet options cannot be an empty list.'],
      );
    }

    for (var j = 0; j < credentialSet.options.length; j++) {
      final option = credentialSet.options[j];
      if (option.isEmpty) {
        return ValidationResult.invalid(
          contextPath: 'query.credential_sets[$i].options[$j]',
          errors: ['CredentialSet option cannot be an empty list.'],
        );
      }

      for (var k = 0; k < option.length; k++) {
        final credId = option[k];
        if (!validCredentialIds.contains(credId)) {
          return ValidationResult.invalid(
            contextPath: 'query.credential_sets[$i].options[$j][$k]',
            errors: [
              'Credential ID "$credId" in credential set does not match any credential in the query.',
            ],
          );
        }
      }
    }
  }

  return ValidationResult.valid();
}