#[cfg(feature = "fasta")]
pub mod fasta;
#[cfg(feature = "fastq")]
pub mod fastq;
#[cfg(feature = "vcf")]
pub mod vcf;
#[cfg(feature = "sequence")]
pub mod sequence;
#[cfg(feature = "quality")]
pub mod quality;
use crate::error;
pub trait Format {
fn header(
&self,
output: &mut dyn std::io::Write,
rng: &mut rand::rngs::StdRng,
) -> error::Result<()>;
fn record(
&self,
output: &mut dyn std::io::Write,
rng: &mut rand::rngs::StdRng,
) -> error::Result<()>;
fn records(
&self,
output: &mut dyn std::io::Write,
rng: &mut rand::rngs::StdRng,
number: usize,
) -> error::Result<()> {
for _ in 0..number {
self.record(output, rng)?;
output.write_all(&[b'\n'])?;
}
Ok(())
}
fn create<P>(&self, path: P, rng: &mut rand::rngs::StdRng, number: usize) -> error::Result<()>
where
P: core::convert::AsRef<std::path::Path>,
{
let mut output = std::io::BufWriter::new(std::fs::File::create(path)?);
self.header(&mut output, rng)?;
self.records(&mut output, rng, number)?;
Ok(())
}
}