purr 0.9.0

Primitives for reading and writing the SMILES language in Rust.
Documentation
use std::fmt;
use std::convert::TryFrom;

// A ring closure digit (rnum), as described in
/// [OpenSMILES](http://opensmiles.org/opensmiles.html).
#[derive(Debug,PartialEq,Eq,Hash,Clone)]
pub enum Rnum {
    R0,
    R1,
    R2,
    R3,
    R4,
    R5,
    R6,
    R7,
    R8,
    R9,
    R10,
    R11,
    R12,
    R13,
    R14,
    R15,
    R16,
    R17,
    R18,
    R19,
    R20,
    R21,
    R22,
    R23,
    R24,
    R25,
    R26,
    R27,
    R28,
    R29,
    R30,
    R31,
    R32,
    R33,
    R34,
    R35,
    R36,
    R37,
    R38,
    R39,
    R40,
    R41,
    R42,
    R43,
    R44,
    R45,
    R46,
    R47,
    R48,
    R49,
    R50,
    R51,
    R52,
    R53,
    R54,
    R55,
    R56,
    R57,
    R58,
    R59,
    R60,
    R61,
    R62,
    R63,
    R64,
    R65,
    R66,
    R67,
    R68,
    R69,
    R70,
    R71,
    R72,
    R73,
    R74,
    R75,
    R76,
    R77,
    R78,
    R79,
    R80,
    R81,
    R82,
    R83,
    R84,
    R85,
    R86,
    R87,
    R88,
    R89,
    R90,
    R91,
    R92,
    R93,
    R94,
    R95,
    R96,
    R97,
    R98,
    R99
}

impl TryFrom<u16> for Rnum {
    type Error = ();

    fn try_from(value: u16) -> Result<Self, Self::Error> {
        Ok(match value {
            0 => Self::R0,
            1 => Self::R1,
            2 => Self::R2,
            3 => Self::R3,
            4 => Self::R4,
            5 => Self::R5,
            6 => Self::R6,
            7 => Self::R7,
            8 => Self::R8,
            9 => Self::R9,
            10 => Self::R10,
            11 => Self::R11,
            12 => Self::R12,
            13 => Self::R13,
            14 => Self::R14,
            15 => Self::R15,
            16 => Self::R16,
            17 => Self::R17,
            18 => Self::R18,
            19 => Self::R19,
            20 => Self::R20,
            21 => Self::R21,
            22 => Self::R22,
            23 => Self::R23,
            24 => Self::R24,
            25 => Self::R25,
            26 => Self::R26,
            27 => Self::R27,
            28 => Self::R28,
            29 => Self::R29,
            30 => Self::R30,
            31 => Self::R31,
            32 => Self::R32,
            33 => Self::R33,
            34 => Self::R34,
            35 => Self::R35,
            36 => Self::R36,
            37 => Self::R37,
            38 => Self::R38,
            39 => Self::R39,
            40 => Self::R40,
            41 => Self::R41,
            42 => Self::R42,
            43 => Self::R43,
            44 => Self::R44,
            45 => Self::R45,
            46 => Self::R46,
            47 => Self::R47,
            48 => Self::R48,
            49 => Self::R49,
            50 => Self::R50,
            51 => Self::R51,
            52 => Self::R52,
            53 => Self::R53,
            54 => Self::R54,
            55 => Self::R55,
            56 => Self::R56,
            57 => Self::R57,
            58 => Self::R58,
            59 => Self::R59,
            60 => Self::R60,
            61 => Self::R61,
            62 => Self::R62,
            63 => Self::R63,
            64 => Self::R64,
            65 => Self::R65,
            66 => Self::R66,
            67 => Self::R67,
            68 => Self::R68,
            69 => Self::R69,
            70 => Self::R70,
            71 => Self::R71,
            72 => Self::R72,
            73 => Self::R74,
            74 => Self::R74,
            75 => Self::R75,
            76 => Self::R76,
            77 => Self::R77,
            78 => Self::R78,
            79 => Self::R79,
            80 => Self::R80,
            81 => Self::R81,
            82 => Self::R82,
            83 => Self::R83,
            84 => Self::R84,
            85 => Self::R85,
            86 => Self::R86,
            87 => Self::R87,
            88 => Self::R88,
            89 => Self::R89,
            90 => Self::R90,
            91 => Self::R91,
            92 => Self::R92,
            93 => Self::R93,
            94 => Self::R94,
            95 => Self::R95,
            96 => Self::R96,
            97 => Self::R97,
            98 => Self::R98,
            99 => Self::R99,
            _ => return Err(())
        })
    }
}

impl fmt::Display for Rnum {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "{}", match self {
            Self::R0 => "0",
            Self::R1 => "1",
            Self::R2 => "2",
            Self::R3 => "3",
            Self::R4 => "4",
            Self::R5 => "5",
            Self::R6 => "6",
            Self::R7 => "7",
            Self::R8 => "8",
            Self::R9 => "9",
            Self::R10 => "%10",
            Self::R11 => "%11",
            Self::R12 => "%12",
            Self::R13 => "%13",
            Self::R14 => "%14",
            Self::R15 => "%15",
            Self::R16 => "%16",
            Self::R17 => "%17",
            Self::R18 => "%18",
            Self::R19 => "%19",
            Self::R20 => "%20",
            Self::R21 => "%21",
            Self::R22 => "%22",
            Self::R23 => "%23",
            Self::R24 => "%24",
            Self::R25 => "%25",
            Self::R26 => "%26",
            Self::R27 => "%27",
            Self::R28 => "%28",
            Self::R29 => "%29",
            Self::R30 => "%30",
            Self::R31 => "%31",
            Self::R32 => "%32",
            Self::R33 => "%33",
            Self::R34 => "%34",
            Self::R35 => "%35",
            Self::R36 => "%36",
            Self::R37 => "%37",
            Self::R38 => "%38",
            Self::R39 => "%39",
            Self::R40 => "%40",
            Self::R41 => "%41",
            Self::R42 => "%42",
            Self::R43 => "%43",
            Self::R44 => "%44",
            Self::R45 => "%45",
            Self::R46 => "%46",
            Self::R47 => "%47",
            Self::R48 => "%48",
            Self::R49 => "%49",
            Self::R50 => "%50",
            Self::R51 => "%51",
            Self::R52 => "%52",
            Self::R53 => "%53",
            Self::R54 => "%54",
            Self::R55 => "%55",
            Self::R56 => "%56",
            Self::R57 => "%57",
            Self::R58 => "%58",
            Self::R59 => "%59",
            Self::R60 => "%60",
            Self::R61 => "%61",
            Self::R62 => "%62",
            Self::R63 => "%63",
            Self::R64 => "%64",
            Self::R65 => "%65",
            Self::R66 => "%66",
            Self::R67 => "%67",
            Self::R68 => "%68",
            Self::R69 => "%69",
            Self::R70 => "%70",
            Self::R71 => "%71",
            Self::R72 => "%72",
            Self::R73 => "%73",
            Self::R74 => "%74",
            Self::R75 => "%75",
            Self::R76 => "%76",
            Self::R77 => "%77",
            Self::R78 => "%78",
            Self::R79 => "%79",
            Self::R80 => "%80",
            Self::R81 => "%81",
            Self::R82 => "%82",
            Self::R83 => "%83",
            Self::R84 => "%84",
            Self::R85 => "%85",
            Self::R86 => "%86",
            Self::R87 => "%87",
            Self::R88 => "%88",
            Self::R89 => "%89",
            Self::R90 => "%90",
            Self::R91 => "%91",
            Self::R92 => "%92",
            Self::R93 => "%93",
            Self::R94 => "%94",
            Self::R95 => "%95",
            Self::R96 => "%96",
            Self::R97 => "%97",
            Self::R98 => "%98",
            Self::R99 => "%99"
        })  
    }
}