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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
use super::Element;
use serde::Serialize;
use strum::EnumString;
#[derive(Debug, Clone, Serialize)]
pub enum Residue {
AminoAcid(AminoAcid),
Nucleotide(Nucleotide),
Water,
Metal(Element),
Molecule(Molecule),
Other(String),
UnknownAtomOrIon,
UnknownLigand,
}
pub enum StandardResidue {
AminoAcid(StandardAminoAcid),
Nucleotide(StandardNucleotide),
Unknown,
}
#[derive(Debug, Clone, Serialize)]
pub struct Molecule {
code: String,
description: String,
}
#[derive(Debug, Clone, Eq, PartialEq, Serialize)]
pub enum Nucleotide {
Standard(StandardNucleotide),
Modified(String),
Unknown,
}
#[derive(Debug, Clone, Eq, PartialEq, Serialize, EnumString)]
pub enum StandardNucleotide {
A,
C,
G,
U,
DA,
DC,
DG,
DT,
}
#[derive(Debug, Clone, Eq, PartialEq, Serialize)]
pub enum AminoAcid {
Standard(StandardAminoAcid),
Modified(String),
Unknown,
}
#[derive(Debug, Clone, Eq, PartialEq, Serialize)]
pub enum StandardAminoAcid {
Ala,
Arg,
Asn,
Asp,
Cys,
Gln,
Glu,
Gly,
His,
Ile,
Leu,
Lys,
Met,
Phe,
Pro,
Ser,
Thr,
Trp,
Tyr,
Val,
Mse,
Pyl,
Sec,
}
#[derive(Debug, Clone, Eq, PartialEq, Serialize)]
pub struct ModifiedAminoAcid {
pub standard: StandardAminoAcid,
pub description: String,
}
pub trait Monomer {}
impl Monomer for AminoAcid {}
impl Monomer for Nucleotide {}
#[derive(Debug, Clone, Eq, PartialEq, Serialize)]
pub struct ModifiedNucleotide {
pub standard: StandardNucleotide,
pub description: String,
}
pub type ModifiedNucleotideList = Vec<ModifiedNucleotide>;