biors 0.58.1

Command-line tools for bio-rs biological AI model input workflows.
use biors_core::{
    package::{PackageValidationIssueCode, PackageValidationReport},
    verification::{PackageVerificationReport, VerificationIssueCode, VerificationStatus},
};

pub(crate) fn classify_validation_code(report: &PackageValidationReport) -> &'static str {
    let has_issue = |code| {
        report
            .structured_issues
            .iter()
            .any(|issue| issue.code == code)
    };
    if has_issue(PackageValidationIssueCode::InvalidChecksumFormat) {
        "package.invalid_checksum_format"
    } else if has_issue(PackageValidationIssueCode::ChecksumMismatch) {
        "package.checksum_mismatch"
    } else if has_issue(PackageValidationIssueCode::InvalidAssetPath) {
        "package.invalid_asset_path"
    } else if has_issue(PackageValidationIssueCode::LayoutMismatch) {
        "package.layout_mismatch"
    } else if has_issue(PackageValidationIssueCode::AssetReadFailed) {
        "package.asset_read_failed"
    } else if has_issue(PackageValidationIssueCode::InvalidPipelineConfig) {
        "package.invalid_pipeline_config"
    } else if has_issue(PackageValidationIssueCode::InvalidTokenizerConfig) {
        "package.invalid_tokenizer_config"
    } else if has_issue(PackageValidationIssueCode::InvalidVocabConfig) {
        "package.invalid_vocab_config"
    } else {
        "package.validation_failed"
    }
}

pub(crate) fn classify_verification_code(report: &PackageVerificationReport) -> &'static str {
    let has_observation_issue = |code| {
        report
            .observation_issues
            .iter()
            .any(|issue| issue.code == code)
    };
    let has_result_issue = |code| {
        report
            .results
            .iter()
            .any(|result| result.issue_code == Some(code))
    };

    if has_observation_issue(VerificationIssueCode::DuplicateObservation)
        || has_result_issue(VerificationIssueCode::DuplicateObservation)
    {
        "package.duplicate_observation"
    } else if has_observation_issue(VerificationIssueCode::UnexpectedObservation) {
        "package.unexpected_observation"
    } else if has_result_issue(VerificationIssueCode::ObservationMissing) {
        "package.observed_output_missing"
    } else if has_result_issue(VerificationIssueCode::ObservationPathInvalid) {
        "package.invalid_asset_path"
    } else if has_result_issue(VerificationIssueCode::ObservedOutputReadFailed)
        || report
            .results
            .iter()
            .any(|result| matches!(result.status, VerificationStatus::Missing))
    {
        "package.observed_output_missing"
    } else if report.results.iter().any(|result| result.content_mismatch) {
        "package.output_content_mismatch"
    } else if report.results.iter().any(|result| result.checksum_mismatch) {
        "package.checksum_mismatch"
    } else {
        "package.verification_failed"
    }
}