noodles_tabix/io/
writer.rs

1mod index;
2
3use std::io::{self, Write};
4
5use noodles_bgzf as bgzf;
6
7use self::index::write_index;
8use crate::Index;
9
10/// A tabix writer.
11pub struct Writer<W>
12where
13    W: Write,
14{
15    inner: bgzf::Writer<W>,
16}
17
18impl<W> Writer<W>
19where
20    W: Write,
21{
22    /// Creates a tabix writer.
23    ///
24    /// # Examples
25    ///
26    /// ```
27    /// use noodles_tabix as tabix;
28    /// let writer = tabix::io::Writer::new(Vec::new());
29    /// ```
30    pub fn new(writer: W) -> Self {
31        Self {
32            inner: bgzf::Writer::new(writer),
33        }
34    }
35
36    /// Returns a reference to the underlying writer.
37    ///
38    /// # Examples
39    ///
40    /// ```
41    /// # use std::io;
42    /// use noodles_tabix as tabix;
43    /// let writer = tabix::io::Writer::new(io::sink());
44    /// let _inner = writer.get_ref();
45    /// ```
46    pub fn get_ref(&self) -> &bgzf::Writer<W> {
47        &self.inner
48    }
49
50    /// Returns a mutable reference to the underlying writer.
51    ///
52    /// # Examples
53    ///
54    /// ```
55    /// # use std::io;
56    /// use noodles_tabix as tabix;
57    /// let mut writer = tabix::io::Writer::new(io::sink());
58    /// let _inner = writer.get_mut();
59    /// ```
60    pub fn get_mut(&mut self) -> &mut bgzf::Writer<W> {
61        &mut self.inner
62    }
63
64    /// Returns the underlying writer.
65    ///
66    /// # Examples
67    ///
68    /// ```
69    /// # use std::io;
70    /// use noodles_tabix as tabix;
71    /// let writer = tabix::io::Writer::new(io::sink());
72    /// let _inner = writer.into_inner();
73    /// ```
74    pub fn into_inner(self) -> bgzf::Writer<W> {
75        self.inner
76    }
77
78    /// Attempts to finish the output stream.
79    ///
80    /// This is typically only manually called if the underlying stream is needed before the writer
81    /// is dropped.
82    ///
83    /// # Examples
84    ///
85    /// ```
86    /// # use std::io;
87    /// use noodles_tabix as tabix;
88    /// let mut writer = tabix::io::Writer::new(Vec::new());
89    /// writer.try_finish()?;
90    /// # Ok::<(), io::Error>(())
91    /// ```
92    pub fn try_finish(&mut self) -> io::Result<()> {
93        self.inner.try_finish()
94    }
95
96    /// Writes a tabix index.
97    ///
98    /// # Examples
99    ///
100    /// ```
101    /// use noodles_csi::binning_index::index::Header;
102    /// use noodles_tabix as tabix;
103    ///
104    /// let mut writer = tabix::io::Writer::new(Vec::new());
105    /// let index = tabix::Index::builder().set_header(Header::default()).build();
106    /// writer.write_index(&index)?;
107    /// # Ok::<(), std::io::Error>(())
108    /// ```
109    pub fn write_index(&mut self, index: &Index) -> io::Result<()> {
110        write_index(&mut self.inner, index)
111    }
112}