#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub enum NucleicScheme {
#[default]
Amber,
Charmm,
}
impl NucleicScheme {
pub(crate) const fn key(self) -> &'static str {
match self {
Self::Amber => "amber",
Self::Charmm => "charmm",
}
}
pub const fn all() -> &'static [Self] {
&[Self::Amber, Self::Charmm]
}
pub fn charge(self, pos: crate::Position, residue: &str, atom: &str) -> Option<f32> {
crate::generated::get_nucleic_charge(self.key(), pos.key(), residue, atom)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default() {
assert_eq!(NucleicScheme::default(), NucleicScheme::Amber);
}
#[test]
fn count() {
assert_eq!(NucleicScheme::all().len(), 2);
}
#[test]
fn key_format() {
for s in NucleicScheme::all() {
let k = s.key();
assert!(
k.chars()
.all(|c| c.is_ascii_lowercase() || c == '-' || c.is_ascii_digit())
);
}
}
}