use std::io;
use crate::errors;
use crate::io::fasta;
#[derive(Debug, StructOpt)]
#[structopt(verbatim_doc_comment)]
pub struct ProtToTryp {
#[structopt(short = "p", long = "pattern", default_value = "([KR])([^P])")]
pub pattern: String,
}
pub fn prot2tryp(args: ProtToTryp) -> errors::Result<()> {
let pattern = regex::Regex::new(&args.pattern)?;
let mut writer = fasta::Writer::new(io::stdout(), "\n", false);
for record in fasta::Reader::new(io::stdin(), true).records() {
let fasta::Record { header, sequence } = record?;
let first_run = pattern.replace_all(&sequence[0], "$1\n$2");
writer.write_record(fasta::Record {
header,
sequence: pattern
.replace_all(&first_run, "$1\n$2")
.replace("*", "\n")
.lines()
.filter(|x| !x.is_empty())
.map(ToOwned::to_owned)
.collect(),
})?;
}
Ok(())
}