Skip to main content

ferritin_core/
bonds.rs

1/// Bond
2///
3/// Struct for creating Bonds of type [BondOrder]
4///
5#[derive(Debug, PartialEq, Clone)]
6pub struct Bond {
7    atom1: i32,
8    atom2: i32,
9    order: BondOrder,
10    // id
11    // stereo
12    // unique_id
13    // has_setting
14}
15
16impl Bond {
17    pub fn new(atom1: i32, atom2: i32, order: impl Into<BondOrder>) -> Self {
18        Bond {
19            atom1,
20            atom2,
21            order: order.into(),
22        }
23    }
24    pub fn get_atom_indices(&self) -> (i32, i32) {
25        (self.atom1, self.atom2)
26    }
27
28    pub fn get_order(&self) -> BondOrder {
29        self.order
30    }
31}
32
33/// BondOrder:
34///
35/// Enum for defining Bond orders.
36/// **Note: subject to change.**
37/// Needs more research on which convention to follow.
38/// - [biotite](https://www.biotite-python.org/latest/apidoc/biotite.structure.BondType.html#biotite.structure.BondType)
39/// - see also [cdk](http://cdk.github.io/cdk/latest/docs/api/org/openscience/cdk/Bond.html)
40#[repr(u8)]
41#[derive(Debug, PartialEq, Clone, Copy)]
42pub enum BondOrder {
43    Unset = 0,
44    Single = 1,
45    Double = 2,
46    Triple = 3,
47    Quadruple = 4,
48    AromaticSingle = 5,
49    AromaticDouble = 6,
50}
51
52impl From<i32> for BondOrder {
53    fn from(bond_int: i32) -> Self {
54        match bond_int {
55            0 => BondOrder::Unset,
56            1 => BondOrder::Single,
57            2 => BondOrder::Double,
58            3 => BondOrder::Triple,
59            4 => BondOrder::Quadruple,
60            5 => BondOrder::AromaticSingle,
61            6 => BondOrder::AromaticDouble,
62            _ => BondOrder::Unset,
63        }
64    }
65}