biors 0.58.0

Command-line tools for bio-rs biological AI model input workflows.
use crate::cli::{StructureCommand, StructureFormatArg};
use crate::errors::CliError;
use crate::input::open_buffered_input;
use crate::output::print_success;
use biors_core::structure::{
    extract_structure_sequences, parse_pdb_record_reader, validate_pdb_reader_with_hash,
};
use std::path::PathBuf;

pub(super) fn run_structure_command(command: StructureCommand) -> Result<(), CliError> {
    match command {
        StructureCommand::Validate { format, path } => run_structure_validation(format, path),
        StructureCommand::Sequence { format, path } => run_structure_sequence(format, path),
    }
}

fn run_structure_validation(format: StructureFormatArg, path: PathBuf) -> Result<(), CliError> {
    match format {
        StructureFormatArg::Pdb => {
            let reader = open_buffered_input(&path)?;
            let output = validate_pdb_reader_with_hash(reader)
                .map_err(|error| CliError::from_structure_read(path, error))?;
            print_success(Some(output.input_hash), output.report)
        }
    }
}

fn run_structure_sequence(format: StructureFormatArg, path: PathBuf) -> Result<(), CliError> {
    match format {
        StructureFormatArg::Pdb => {
            let reader = open_buffered_input(&path)?;
            let output = parse_pdb_record_reader(reader)
                .map_err(|error| CliError::from_structure_read(path, error))?;
            let sequences = extract_structure_sequences(&output.record);
            print_success(Some(output.input_hash), sequences)
        }
    }
}