1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
use serde::{Deserialize, Serialize}; use std::str::FromStr; #[derive(Debug, Clone, Copy, Serialize, Deserialize)] pub enum Element { H, C, O, N, P, S, Na, Mg, Cl, K, Ca, Fe, Mn, Co, Cr, I, Zn, Cu, F, Al, Se, V, } impl FromStr for Element { type Err = String; fn from_str(inp: &str) -> std::result::Result<Self, <Self as std::str::FromStr>::Err> { match inp { "H" => Ok(Element::H), "C" => Ok(Element::C), "O" => Ok(Element::O), "N" => Ok(Element::N), "P" => Ok(Element::P), "S" => Ok(Element::S), "Na" => Ok(Element::Na), "Mg" => Ok(Element::Mg), "Cl" => Ok(Element::Cl), "K" => Ok(Element::K), "Ca" => Ok(Element::Ca), "Fe" => Ok(Element::Fe), "Mn" => Ok(Element::Mn), "Co" => Ok(Element::Co), "Cr" => Ok(Element::Cr), "I" => Ok(Element::I), "Zn" => Ok(Element::Zn), "Cu" => Ok(Element::Cu), "F" => Ok(Element::F), "Al" => Ok(Element::Al), "Se" => Ok(Element::Se), "V" => Ok(Element::V), _ => Err(format!("Unknown atom name {}", inp)), } } }