validate method
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();
}