space_trav_lr_rust 0.1.0

Spatial gene regulatory network inference and in-silico perturbation (Rust port of SpaceTravLR)
use std::path::{Path, PathBuf};

pub fn list_betadata_target_genes(dir: &str) -> anyhow::Result<Vec<String>> {
    let dir_path = Path::new(dir);
    anyhow::ensure!(
        dir_path.is_dir(),
        "betadata directory does not exist: {}",
        dir
    );
    let mut genes = Vec::new();
    for entry in std::fs::read_dir(dir_path)? {
        let entry = entry?;
        let name = entry.file_name();
        let Some(s) = name.to_str() else {
            continue;
        };
        if let Some(stem) = s.strip_suffix("_betadata.feather") {
            genes.push(stem.to_string());
        }
    }
    genes.sort();
    Ok(genes)
}

pub fn betadata_feather_path(dir: &str, gene: &str) -> PathBuf {
    Path::new(dir).join(format!("{}_betadata.feather", gene))
}