mod header;
use tokio::io::{self, AsyncWrite, AsyncWriteExt};
use self::header::write_header;
use crate::{Header, Record};
pub struct Writer<W> {
inner: W,
}
impl<W> Writer<W>
where
W: AsyncWrite + Unpin,
{
pub fn new(inner: W) -> Self {
Self { inner }
}
pub fn get_ref(&self) -> &W {
&self.inner
}
pub fn get_mut(&mut self) -> &mut W {
&mut self.inner
}
pub fn into_inner(self) -> W {
self.inner
}
pub async fn write_header(&mut self, header: &Header) -> io::Result<()> {
write_header(&mut self.inner, header).await
}
pub async fn write_record(&mut self, header: &Header, record: &Record) -> io::Result<()> {
self.write_alignment_record(header, record).await
}
pub async fn write_alignment_record(
&mut self,
header: &Header,
record: &dyn crate::alignment::Record,
) -> io::Result<()> {
use crate::io::writer::write_record;
let mut buf = Vec::new();
write_record(&mut buf, header, record)?;
self.inner.write_all(&buf).await
}
}