use std::fmt::{Display, Formatter};
pub mod dbfetch;
pub mod ebisearch;
pub use dbfetch::{dbfetchdbs::DbfetchDbs, Dbfetch, DbfetchStyle};
pub use ebisearch::{
ebisearchdomains::EbiSearchDomains, ebisearchquery::EbiSearchQuery, EbiSearch,
};
pub use crate::core::EbioticClient;
pub use crate::core::Service;
pub const EBI_DBFETCH_ENDPOINT: &str = "https://www.ebi.ac.uk/Tools/dbfetch/";
pub const EBI_SEARCH_ENDPOINT: &str = "https://www.ebi.ac.uk/ebisearch/ws/rest/";
#[derive(Eq, PartialEq, Debug, Clone)]
pub enum DataReturnFormats {
Fasta,
Json,
Pdb,
Mmcif,
Xml,
Obo,
Csv,
Tsv,
Gff3,
Gff2,
PatentEquivalents,
}
#[derive(Debug, Clone, Eq, PartialEq)]
pub struct AccessionIds {
ids: Vec<String>,
}
trait AvailableReturnFormats {
fn available_return_formats(&self) -> Vec<DataReturnFormats>;
}
impl AccessionIds {
pub fn new(ids: Vec<String>) -> AccessionIds {
AccessionIds { ids }
}
pub fn add_id(&mut self, id: String) {
self.ids.push(id);
}
pub fn set_ids(&mut self, ids: Vec<String>) {
self.ids = ids;
}
pub fn ids(&self) -> &Vec<String> {
&self.ids
}
}
impl Display for AccessionIds {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
let ids = self.ids.join(",");
write!(f, "{}", ids)
}
}
impl From<Vec<String>> for AccessionIds {
fn from(ids: Vec<String>) -> Self {
AccessionIds { ids }
}
}
impl Display for DataReturnFormats {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
match self {
DataReturnFormats::Fasta => write!(f, "fasta"),
DataReturnFormats::Json => write!(f, "json"),
DataReturnFormats::Pdb => write!(f, "pdb"),
DataReturnFormats::Mmcif => write!(f, "mmcif"),
DataReturnFormats::Xml => write!(f, "xml"),
DataReturnFormats::Obo => write!(f, "obo"),
DataReturnFormats::Csv => write!(f, "csv"),
DataReturnFormats::Gff3 => write!(f, "gff3"),
DataReturnFormats::Tsv => write!(f, "tab"),
DataReturnFormats::Gff2 => write!(f, "gff2"),
DataReturnFormats::PatentEquivalents => write!(f, "patent_equivalents"),
}
}
}