noodles_fasta/io/writer/
builder.rs

1use std::{
2    fs::File,
3    io::{self, Write},
4    path::Path,
5};
6
7use super::Writer;
8
9pub(crate) const DEFAULT_LINE_BASE_COUNT: usize = 80;
10
11/// A FASTA writer builder.
12pub struct Builder {
13    line_base_count: usize,
14}
15
16impl Builder {
17    /// Sets the number of bases per line.
18    ///
19    /// By default, this is set to 80.
20    ///
21    /// # Examples
22    ///
23    /// ```
24    /// use noodles_fasta::io::writer::Builder;
25    /// let builder = Builder::default().set_line_base_count(100);
26    /// ```
27    pub fn set_line_base_count(mut self, line_base_count: usize) -> Self {
28        self.line_base_count = line_base_count;
29        self
30    }
31
32    /// Builds a FASTA writer from a path.
33    ///
34    /// # Examples
35    ///
36    /// ```no_run
37    /// use noodles_fasta::io::writer::Builder;
38    /// let writer = Builder::default().build_from_path("out.fa")?;
39    /// # Ok::<_, std::io::Error>(())
40    /// ```
41    pub fn build_from_path<P>(self, dst: P) -> io::Result<Writer<File>>
42    where
43        P: AsRef<Path>,
44    {
45        File::create(dst).map(|file| self.build_from_writer(file))
46    }
47
48    /// Builds a FASTA writer from a writer.
49    ///
50    /// # Examples
51    ///
52    /// ```
53    /// # use std::io;
54    /// use noodles_fasta::io::writer::Builder;
55    /// let writer = Builder::default().build_from_writer(io::sink());
56    /// ```
57    pub fn build_from_writer<W>(self, writer: W) -> Writer<W>
58    where
59        W: Write,
60    {
61        Writer {
62            inner: writer,
63            line_base_count: self.line_base_count,
64        }
65    }
66
67    /// Builds a FASTA writer from a writer.
68    #[deprecated(since = "0.43.0", note = "Use `Builder::build_from_writer` instead.")]
69    pub fn build_with_writer<W>(self, writer: W) -> Writer<W>
70    where
71        W: Write,
72    {
73        self.build_from_writer(writer)
74    }
75}
76
77impl Default for Builder {
78    fn default() -> Self {
79        Self {
80            line_base_count: DEFAULT_LINE_BASE_COUNT,
81        }
82    }
83}