balsa 0.3.2

Reference implementation for the Balsa molecular line notation.
Documentation
use std::fmt;

#[derive(Debug, PartialEq, Clone, Eq, Hash)]
pub enum Bridge {
    B1,
    B2,
    B3,
    B4,
    B5,
    B6,
    B7,
    B8,
    B9,
    B10,
    B11,
    B12,
    B13,
    B14,
    B15,
    B16,
    B17,
    B18,
    B19,
    B20,
    B21,
    B22,
    B23,
    B24,
    B25,
    B26,
    B27,
    B28,
    B29,
    B30,
    B31,
    B32,
    B33,
    B34,
    B35,
    B36,
    B37,
    B38,
    B39,
    B40,
    B41,
    B42,
    B43,
    B44,
    B45,
    B46,
    B47,
    B48,
    B49,
    B50,
    B51,
    B52,
    B53,
    B54,
    B55,
    B56,
    B57,
    B58,
    B59,
    B60,
    B61,
    B62,
    B63,
    B64,
    B65,
    B66,
    B67,
    B68,
    B69,
    B70,
    B71,
    B72,
    B73,
    B74,
    B75,
    B76,
    B77,
    B78,
    B79,
    B80,
    B81,
    B82,
    B83,
    B84,
    B85,
    B86,
    B87,
    B88,
    B89,
    B90,
    B91,
    B92,
    B93,
    B94,
    B95,
    B96,
    B97,
    B98,
    B99,
}

impl Bridge {
    pub fn new(value: u8) -> Option<Self> {
        Some(match value {
            1 => Self::B1,
            2 => Self::B2,
            3 => Self::B3,
            4 => Self::B4,
            5 => Self::B5,
            6 => Self::B6,
            7 => Self::B7,
            8 => Self::B8,
            9 => Self::B9,
            10 => Self::B10,
            11 => Self::B11,
            12 => Self::B12,
            13 => Self::B13,
            14 => Self::B14,
            15 => Self::B15,
            16 => Self::B16,
            17 => Self::B17,
            18 => Self::B18,
            19 => Self::B19,
            20 => Self::B20,
            21 => Self::B21,
            22 => Self::B22,
            23 => Self::B23,
            24 => Self::B24,
            25 => Self::B25,
            26 => Self::B26,
            27 => Self::B27,
            28 => Self::B28,
            29 => Self::B29,
            30 => Self::B30,
            31 => Self::B31,
            32 => Self::B32,
            33 => Self::B33,
            34 => Self::B34,
            35 => Self::B35,
            36 => Self::B36,
            37 => Self::B37,
            38 => Self::B38,
            39 => Self::B39,
            40 => Self::B40,
            41 => Self::B41,
            42 => Self::B42,
            43 => Self::B43,
            44 => Self::B44,
            45 => Self::B45,
            46 => Self::B46,
            47 => Self::B47,
            48 => Self::B48,
            49 => Self::B49,
            50 => Self::B50,
            51 => Self::B51,
            52 => Self::B52,
            53 => Self::B53,
            54 => Self::B54,
            55 => Self::B55,
            56 => Self::B56,
            57 => Self::B57,
            58 => Self::B58,
            59 => Self::B59,
            60 => Self::B60,
            61 => Self::B61,
            62 => Self::B62,
            63 => Self::B63,
            64 => Self::B64,
            65 => Self::B65,
            66 => Self::B66,
            67 => Self::B67,
            68 => Self::B68,
            69 => Self::B69,
            70 => Self::B70,
            71 => Self::B71,
            72 => Self::B72,
            73 => Self::B74,
            74 => Self::B74,
            75 => Self::B75,
            76 => Self::B76,
            77 => Self::B77,
            78 => Self::B78,
            79 => Self::B79,
            80 => Self::B80,
            81 => Self::B81,
            82 => Self::B82,
            83 => Self::B83,
            84 => Self::B84,
            85 => Self::B85,
            86 => Self::B86,
            87 => Self::B87,
            88 => Self::B88,
            89 => Self::B89,
            90 => Self::B90,
            91 => Self::B91,
            92 => Self::B92,
            93 => Self::B93,
            94 => Self::B94,
            95 => Self::B95,
            96 => Self::B96,
            97 => Self::B97,
            98 => Self::B98,
            99 => Self::B99,
            _ => return None,
        })
    }
}

impl fmt::Display for Bridge {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        f.write_str(match self {
            Self::B1 => "1",
            Self::B2 => "2",
            Self::B3 => "3",
            Self::B4 => "4",
            Self::B5 => "5",
            Self::B6 => "6",
            Self::B7 => "7",
            Self::B8 => "8",
            Self::B9 => "9",
            Self::B10 => "%10",
            Self::B11 => "%11",
            Self::B12 => "%12",
            Self::B13 => "%13",
            Self::B14 => "%14",
            Self::B15 => "%15",
            Self::B16 => "%16",
            Self::B17 => "%17",
            Self::B18 => "%18",
            Self::B19 => "%19",
            Self::B20 => "%20",
            Self::B21 => "%21",
            Self::B22 => "%22",
            Self::B23 => "%23",
            Self::B24 => "%24",
            Self::B25 => "%25",
            Self::B26 => "%26",
            Self::B27 => "%27",
            Self::B28 => "%28",
            Self::B29 => "%29",
            Self::B30 => "%30",
            Self::B31 => "%31",
            Self::B32 => "%32",
            Self::B33 => "%33",
            Self::B34 => "%34",
            Self::B35 => "%35",
            Self::B36 => "%36",
            Self::B37 => "%37",
            Self::B38 => "%38",
            Self::B39 => "%39",
            Self::B40 => "%40",
            Self::B41 => "%41",
            Self::B42 => "%42",
            Self::B43 => "%43",
            Self::B44 => "%44",
            Self::B45 => "%45",
            Self::B46 => "%46",
            Self::B47 => "%47",
            Self::B48 => "%48",
            Self::B49 => "%49",
            Self::B50 => "%50",
            Self::B51 => "%51",
            Self::B52 => "%52",
            Self::B53 => "%53",
            Self::B54 => "%54",
            Self::B55 => "%55",
            Self::B56 => "%56",
            Self::B57 => "%57",
            Self::B58 => "%58",
            Self::B59 => "%59",
            Self::B60 => "%60",
            Self::B61 => "%61",
            Self::B62 => "%62",
            Self::B63 => "%63",
            Self::B64 => "%64",
            Self::B65 => "%65",
            Self::B66 => "%66",
            Self::B67 => "%67",
            Self::B68 => "%68",
            Self::B69 => "%69",
            Self::B70 => "%70",
            Self::B71 => "%71",
            Self::B72 => "%72",
            Self::B73 => "%73",
            Self::B74 => "%74",
            Self::B75 => "%75",
            Self::B76 => "%76",
            Self::B77 => "%77",
            Self::B78 => "%78",
            Self::B79 => "%79",
            Self::B80 => "%80",
            Self::B81 => "%81",
            Self::B82 => "%82",
            Self::B83 => "%83",
            Self::B84 => "%84",
            Self::B85 => "%85",
            Self::B86 => "%86",
            Self::B87 => "%87",
            Self::B88 => "%88",
            Self::B89 => "%89",
            Self::B90 => "%90",
            Self::B91 => "%91",
            Self::B92 => "%92",
            Self::B93 => "%93",
            Self::B94 => "%94",
            Self::B95 => "%95",
            Self::B96 => "%96",
            Self::B97 => "%97",
            Self::B98 => "%98",
            Self::B99 => "%99",
        })
    }
}