use std::collections::HashMap;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum AminoAcid {
Alanine, Arginine, Asparagine, AsparticAcid, Cysteine,
GlutamicAcid, Glutamine, Glycine, Histidine, Isoleucine,
Leucine, Lysine, Methionine, Phenylalanine, Proline,
Serine, Threonine, Tryptophan, Tyrosine, Valine,
Stop, }
#[derive(Debug)]
pub struct CodonTable {
map: HashMap<String, AminoAcid>,
}
impl Default for CodonTable {
fn default() -> Self {
let mut map = HashMap::new();
map.insert("GCU".to_string(), AminoAcid::Alanine);
map.insert("GCC".to_string(), AminoAcid::Alanine);
map.insert("GCA".to_string(), AminoAcid::Alanine);
map.insert("GCG".to_string(), AminoAcid::Alanine);
map.insert("CGU".to_string(), AminoAcid::Arginine);
map.insert("CGC".to_string(), AminoAcid::Arginine);
map.insert("CGA".to_string(), AminoAcid::Arginine);
map.insert("CGG".to_string(), AminoAcid::Arginine);
map.insert("AGA".to_string(), AminoAcid::Arginine);
map.insert("AGG".to_string(), AminoAcid::Arginine);
map.insert("UUU".to_string(), AminoAcid::Phenylalanine);
map.insert("UUC".to_string(), AminoAcid::Phenylalanine);
map.insert("UUA".to_string(), AminoAcid::Leucine);
map.insert("UUG".to_string(), AminoAcid::Leucine);
map.insert("CUU".to_string(), AminoAcid::Leucine);
map.insert("CUC".to_string(), AminoAcid::Leucine);
map.insert("CUA".to_string(), AminoAcid::Leucine);
map.insert("CUG".to_string(), AminoAcid::Leucine);
map.insert("UAA".to_string(), AminoAcid::Stop);
map.insert("UAG".to_string(), AminoAcid::Stop);
map.insert("UGA".to_string(), AminoAcid::Stop);
map.insert("AUG".to_string(), AminoAcid::Methionine);
Self { map }
}
}
impl CodonTable {
pub fn new() -> Self {
Self::default()
}
pub fn translate(&self, codon: &str) -> Option<AminoAcid> {
let rna_codon = codon.replace('T', "U");
self.map.get(&rna_codon).cloned()
}
}