biors 0.58.0

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 {
    if report
        .structured_issues
        .iter()
        .any(|issue| issue.code == PackageValidationIssueCode::InvalidChecksumFormat)
    {
        "package.invalid_checksum_format"
    } else if report
        .structured_issues
        .iter()
        .any(|issue| issue.code == PackageValidationIssueCode::ChecksumMismatch)
    {
        "package.checksum_mismatch"
    } else if report
        .structured_issues
        .iter()
        .any(|issue| issue.code == PackageValidationIssueCode::InvalidAssetPath)
    {
        "package.invalid_asset_path"
    } else if report
        .structured_issues
        .iter()
        .any(|issue| issue.code == PackageValidationIssueCode::LayoutMismatch)
    {
        "package.layout_mismatch"
    } else if report
        .structured_issues
        .iter()
        .any(|issue| issue.code == PackageValidationIssueCode::AssetReadFailed)
    {
        "package.asset_read_failed"
    } else if report
        .structured_issues
        .iter()
        .any(|issue| issue.code == PackageValidationIssueCode::InvalidPipelineConfig)
    {
        "package.invalid_pipeline_config"
    } else if report
        .structured_issues
        .iter()
        .any(|issue| issue.code == PackageValidationIssueCode::InvalidTokenizerConfig)
    {
        "package.invalid_tokenizer_config"
    } else if report
        .structured_issues
        .iter()
        .any(|issue| issue.code == PackageValidationIssueCode::InvalidVocabConfig)
    {
        "package.invalid_vocab_config"
    } else {
        "package.validation_failed"
    }
}

pub(crate) fn classify_verification_code(report: &PackageVerificationReport) -> &'static str {
    if report
        .observation_issues
        .iter()
        .any(|issue| issue.code == VerificationIssueCode::DuplicateObservation)
        || report
            .results
            .iter()
            .any(|result| result.issue_code == Some(VerificationIssueCode::DuplicateObservation))
    {
        "package.duplicate_observation"
    } else if report
        .observation_issues
        .iter()
        .any(|issue| issue.code == VerificationIssueCode::UnexpectedObservation)
    {
        "package.unexpected_observation"
    } else if report
        .results
        .iter()
        .any(|result| result.issue_code == Some(VerificationIssueCode::ObservationMissing))
    {
        "package.observed_output_missing"
    } else if report
        .results
        .iter()
        .any(|result| result.issue_code == Some(VerificationIssueCode::ObservationPathInvalid))
    {
        "package.invalid_asset_path"
    } else if report.results.iter().any(|result| {
        result.issue_code == Some(VerificationIssueCode::ObservedOutputReadFailed)
            || 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"
    }
}