genome-sh 0.1.0

The jq of genomics. Fast, local, human-readable variant analysis.
use std::path::PathBuf;

use anyhow::Result;
use clap::Args;

use crate::output::Format;
use crate::predict::AlphaGenomeClient;

#[derive(Args)]
pub struct PredictArgs {
    /// Variant to predict: "chr:pos ref alt" or rsID.
    #[arg(required = true, num_args = 1..)]
    pub variants: Vec<String>,

    /// Output format.
    #[arg(short, long, default_value = "human")]
    pub format: Format,

    /// Prediction tracks to include (e.g., expression, splicing, chromatin).
    #[arg(long, value_delimiter = ',')]
    pub tracks: Option<Vec<String>>,

    /// Input VCF file (predict effects for top N variants).
    #[arg(long)]
    pub vcf: Option<PathBuf>,

    /// Number of top variants to predict from VCF.
    #[arg(long, default_value = "10")]
    pub top: usize,
}

impl PredictArgs {
    pub async fn run(self) -> Result<()> {
        let client = AlphaGenomeClient::new()?;

        for variant_str in &self.variants {
            let prediction = client.predict_variant(variant_str).await?;
            prediction.print(self.format.clone())?;
        }

        Ok(())
    }
}