Skip to main content

deepbiop_fq/encode/
option.rs

1use deepbiop_core::default::{BASES, QUAL_OFFSET};
2use derive_builder::Builder;
3use serde::{Deserialize, Serialize};
4use std::fmt::{self, Display, Formatter};
5
6use pyo3::prelude::*;
7use pyo3_stub_gen::derive::*;
8
9#[gen_stub_pyclass]
10#[pyclass(module = "deepbiop.fq")]
11#[derive(Debug, Builder, Default, Clone, Serialize, Deserialize)]
12pub struct EncoderOption {
13    #[pyo3(get, set)]
14    #[builder(default = "QUAL_OFFSET")]
15    pub qual_offset: u8,
16
17    #[pyo3(get, set)]
18    #[builder(default = "BASES.to_vec()")]
19    pub bases: Vec<u8>,
20
21    #[pyo3(get, set)]
22    #[builder(default = "2")]
23    pub threads: usize,
24}
25
26#[gen_stub_pymethods]
27#[pymethods]
28impl EncoderOption {
29    #[new]
30    #[pyo3(signature = (qual_offset, bases, threads=None))]
31    fn py_new(qual_offset: u8, bases: String, threads: Option<usize>) -> Self {
32        EncoderOptionBuilder::default()
33            .qual_offset(qual_offset)
34            .bases(bases.as_bytes().to_vec())
35            .threads(threads.unwrap_or(2))
36            .build()
37            .expect("Failed to build FqEncoderOption from Python arguments.")
38    }
39}
40
41impl Display for EncoderOption {
42    fn fmt(&self, f: &mut Formatter) -> fmt::Result {
43        write!(
44            f,
45            "FqEncoderOption {{ qual_offset: {}, bases: {:?}}}",
46            self.qual_offset, self.bases,
47        )
48    }
49}