use std::borrow::Cow;
use std::io;
use crate::errors;
use crate::io::fasta;
#[derive(Debug, StructOpt)]
#[structopt(verbatim_doc_comment)]
pub struct ProtToKmer {
#[structopt(short = "k", long = "length", default_value = "9")]
pub length: usize,
}
pub fn prot2kmer(args: ProtToKmer) -> errors::Result<()> {
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?;
if sequence[0].len() < args.length {
continue;
}
writer.write_record(fasta::Record {
header,
sequence: sequence[0]
.as_bytes()
.windows(args.length)
.map(String::from_utf8_lossy)
.map(Cow::into_owned)
.collect(),
})?;
}
Ok(())
}