deepbiop_fa/encode/
option.rs

1use derive_builder::Builder;
2use serde::{Deserialize, Serialize};
3use std::fmt::{self, Display, Formatter};
4
5use pyo3::prelude::*;
6use pyo3_stub_gen::derive::*;
7
8pub const BASES: &[u8] = b"ATCGN";
9
10/// Options for configuring the FASTA sequence encoder.
11///
12/// This struct provides configuration options for encoding FASTA sequences,
13/// such as which bases to consider during encoding.
14///
15/// # Fields
16///
17/// * `bases` - A vector of valid bases (as bytes) to use for encoding. Defaults to "ATCGN".
18///
19/// # Example
20///
21/// ```
22/// use deepbiop_fa::encode::option::EncoderOption;
23///
24/// let options = EncoderOption::default();
25/// ```
26#[gen_stub_pyclass]
27#[pyclass(module = "deepbiop.fa")]
28#[derive(Debug, Builder, Default, Clone, Serialize, Deserialize)]
29pub struct EncoderOption {
30    #[pyo3(get, set)]
31    #[builder(default = "BASES.to_vec()")]
32    pub bases: Vec<u8>,
33}
34
35#[gen_stub_pymethods]
36#[pymethods]
37impl EncoderOption {
38    #[new]
39    #[pyo3(signature = (bases))]
40    fn py_new(bases: String) -> Self {
41        EncoderOptionBuilder::default()
42            .bases(bases.as_bytes().to_vec())
43            .build()
44            .expect("Failed to build FqEncoderOption from Python arguments.")
45    }
46}
47
48impl Display for EncoderOption {
49    fn fmt(&self, f: &mut Formatter) -> fmt::Result {
50        write!(f, "FaEncoderOption {{ bases: {:?} }}", self.bases)
51    }
52}