pub struct Writer<W> { /* private fields */ }
Expand description
An async CRAM writer.
A call to Self::shutdown
must be made before the writer is dropped.
Implementations§
Source§impl<W> Writer<W>where
W: AsyncWrite + Unpin,
impl<W> Writer<W>where
W: AsyncWrite + Unpin,
Sourcepub fn new(inner: W) -> Self
pub fn new(inner: W) -> Self
Creates an async CRAM writer.
§Examples
use noodles_cram as cram;
use tokio::io;
let writer = cram::r#async::io::Writer::new(io::sink());
Sourcepub fn get_ref(&self) -> &W
pub fn get_ref(&self) -> &W
Returns a reference to the underlying writer.
§Examples
use noodles_cram as cram;
use tokio::io;
let writer = cram::r#async::io::Writer::new(io::sink());
let inner = writer.get_ref();
Sourcepub async fn shutdown(&mut self, header: &Header) -> Result<()>
pub async fn shutdown(&mut self, header: &Header) -> Result<()>
Attempts to shutdown the output stream by writing any pending containers and a final EOF container.
§Examples
use noodles_cram as cram;
use noodles_sam as sam;
use tokio::io;
let mut writer = cram::r#async::io::Writer::new(io::sink());
let header = sam::Header::default();
writer.shutdown(&header).await?;
Sourcepub async fn write_file_definition(&mut self) -> Result<()>
pub async fn write_file_definition(&mut self) -> Result<()>
Writes a CRAM file definition.
The file ID is set as a blank value ([0x00; 20]
).
§Examples
use noodles_cram as cram;
let mut writer = cram::r#async::io::Writer::new(Vec::new());
writer.write_file_definition().await?;
assert_eq!(writer.get_ref(), &[
// magic number (CRAM)
0x43, 0x52, 0x41, 0x4d,
// format (major, minor)
0x03, 0x00,
// file ID
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
]);
Sourcepub async fn write_file_header(&mut self, header: &Header) -> Result<()>
pub async fn write_file_header(&mut self, header: &Header) -> Result<()>
Writes a CRAM file header container.
The position of the stream is expected to be directly after the file definition.
Entries in the reference sequence dictionary that are missing MD5 checksums (M5
) will
automatically be calculated and added to the written record.
§Examples
use noodles_cram as cram;
use noodles_sam as sam;
use tokio::io;
let mut writer = cram::r#async::io::Writer::new(io::sink());
writer.write_file_definition().await?;
let header = sam::Header::default();
writer.write_file_header(&header).await?;
writer.shutdown(&header).await?;
Sourcepub async fn write_header(&mut self, header: &Header) -> Result<()>
pub async fn write_header(&mut self, header: &Header) -> Result<()>
Writes a SAM header.
This writes the CRAM magic number, the file definition, and file header using the given SAM header.
use noodles_cram as cram;
use noodles_sam as sam;
use tokio::io;
let mut writer = cram::r#async::io::Writer::new(io::sink());
let header = sam::Header::default();
writer.write_header(&header).await?;
writer.shutdown(&header).await?;
Sourcepub async fn write_record(
&mut self,
header: &Header,
record: Record,
) -> Result<()>
pub async fn write_record( &mut self, header: &Header, record: Record, ) -> Result<()>
Writes a CRAM record.
§Examples
use noodles_cram as cram;
use noodles_sam as sam;
use tokio::io;
let mut writer = cram::r#async::io::Writer::new(io::sink());
writer.write_file_definition().await?;
let header = sam::Header::default();
writer.write_file_header(&header).await?;
let record = cram::Record::default();
writer.write_record(&header, record).await?;
writer.shutdown(&header).await?;
Sourcepub async fn write_alignment_record<R>(
&mut self,
header: &Header,
record: &R,
) -> Result<()>
pub async fn write_alignment_record<R>( &mut self, header: &Header, record: &R, ) -> Result<()>
Writes an alignment record.
§Examples
use noodles_cram as cram;
use noodles_sam as sam;
use tokio::io;
let mut writer = cram::r#async::io::Writer::new(io::sink());
writer.write_file_definition().await?;
let header = sam::Header::default();
writer.write_file_header(&header).await?;
let record = sam::Record::default();
writer.write_alignment_record(&header, &record).await?;
writer.shutdown(&header).await?;