pub use crate::alphabet::Alphabet;
pub use crate::distance_matrix::DistanceResult;
pub use crate::models::SubstitutionModel;
pub use crate::msa::MSA;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, ts_rs::TS, Serialize, Deserialize)]
#[ts(export, export_to = "../../wasm/types/lib_types.ts")]
pub struct SequenceObject {
pub identifier: String,
pub sequence: String,
}
impl SequenceObject {
pub fn len(&self) -> usize {
self.sequence.len()
}
}
#[derive(Serialize, Deserialize, ts_rs::TS, Clone, Debug)]
#[ts(export, export_to = "../../wasm/types/lib_types.ts")]
pub struct DistConfig {
pub msa: Vec<SequenceObject>,
pub substitution_model: SubstitutionModel,
#[serde(default)]
pub alphabet: Option<Alphabet>,
#[serde(default)]
pub num_threads: Option<usize>,
}
#[derive(Serialize, Deserialize, ts_rs::TS, Clone, Debug)]
#[ts(export, export_to = "../../wasm/types/lib_types.ts")]
pub struct NJConfig {
pub msa: Vec<SequenceObject>,
pub n_bootstrap_samples: usize,
pub substitution_model: SubstitutionModel,
#[serde(default)]
pub alphabet: Option<Alphabet>,
#[serde(default)]
pub num_threads: Option<usize>,
#[serde(default)]
pub return_distance_matrix: bool,
#[serde(default)]
pub return_average_distance: bool,
}
#[derive(Serialize, Deserialize, ts_rs::TS, Clone, Debug, PartialEq)]
#[ts(export, export_to = "../../wasm/types/lib_types.ts")]
pub struct NJResult {
pub newick: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub distance_matrix: Option<DistanceResult>,
#[serde(skip_serializing_if = "Option::is_none")]
pub average_distance: Option<f64>,
}