use crate::hgvs::variant::Accession;
pub(crate) fn parse_accession(s: &str) -> Accession {
if let Some((prefix_num, version)) = s.rsplit_once('.') {
if let Ok(v) = version.parse::<u32>() {
if let Some((prefix, number)) = prefix_num.split_once('_') {
return Accession::new(prefix, number, Some(v));
}
}
}
if let Some((prefix, number)) = s.split_once('_') {
return Accession::new(prefix, number, None);
}
Accession::new(s, "", None)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn parse_nm_with_version() {
let acc = parse_accession("NM_000088.3");
assert_eq!(acc.to_string(), "NM_000088.3");
}
#[test]
fn parse_np_with_version() {
let acc = parse_accession("NP_000079.2");
assert_eq!(acc.to_string(), "NP_000079.2");
}
#[test]
fn parse_without_version() {
let acc = parse_accession("NM_000088");
assert_eq!(acc.to_string(), "NM_000088");
}
}