deepbiop_fq/encode/
option.rs1use 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}