use bincode::config::Configuration;
use lazy_static::lazy_static;
use std::collections::HashMap;
use crate::place_desc::PlaceDB;
lazy_static! {
pub static ref PLACE_DB: PlaceDB = {
init_place_db().expect("Failed to initialize PLACE database")
};
pub static ref IUPAC_MAP: HashMap<char, &'static str> = {
init_iupac_map()
};
}
fn init_place_db() -> Result<PlaceDB, String> {
let place_db: &[u8] = include_bytes!("./db_file/place.db");
let read_config = bincode::config::standard().with_variable_int_encoding();
let (bin_db, _) =
bincode::borrow_decode_from_slice::<PlaceDB, Configuration>(place_db, read_config)
.map_err(|e| format!("Failed to decode place_db: {}", e))?;
Ok(bin_db)
}
fn init_iupac_map() -> HashMap<char, &'static str> {
let mut m = HashMap::new();
m.insert('A', "A");
m.insert('C', "C");
m.insert('G', "G");
m.insert('T', "T");
m.insert('R', "[AG]");
m.insert('Y', "[CT]");
m.insert('M', "[AC]");
m.insert('K', "[GT]");
m.insert('S', "[GC]");
m.insert('W', "[AT]");
m.insert('B', "[CGT]");
m.insert('D', "[AGT]");
m.insert('H', "[ACT]");
m.insert('V', "[ACG]");
m.insert('N', "[ACGT]");
m
}