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}