use anyhow::{Context, Result};
use clap::Args;
use bio_forge::Structure;
use bio_forge::ops::{CleanConfig, clean_structure};
use crate::commands::{build_name_set, run_with_spinner};
#[derive(Debug, Default, Args)]
pub struct CleanArgs {
#[arg(long)]
pub water: bool,
#[arg(long)]
pub ions: bool,
#[arg(long)]
pub hydrogens: bool,
#[arg(long)]
pub hetero: bool,
#[arg(long = "keep", value_name = "RES_NAME")]
pub keep: Vec<String>,
#[arg(long = "remove", value_name = "RES_NAME")]
pub remove: Vec<String>,
}
pub fn run(structure: &mut Structure, args: &CleanArgs) -> Result<()> {
run_with_spinner("Cleaning structure", || {
let config = CleanConfig {
remove_water: args.water,
remove_ions: args.ions,
remove_hydrogens: args.hydrogens,
remove_hetero: args.hetero,
keep_residue_names: build_name_set(&args.keep),
remove_residue_names: build_name_set(&args.remove),
};
clean_structure(structure, &config).context("Failed to clean structure")?;
Ok(())
})
}