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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
//! SubstanceProtein
//!
//! URL: http://hl7.org/fhir/StructureDefinition/SubstanceProtein
//!
//! Version: 4.0.1
//!
//! A SubstanceProtein is defined as a single unit of a linear amino acid
//! sequence, or a combination of subunits that are either covalently linked or
//! have a defined invariant stoichiometric relationship. This includes all
//! synthetic, recombinant and purified SubstanceProteins of defined sequence,
//! whether the use is therapeutic or prophylactic. This set of elements will
//! be used to describe albumins, coagulation factors, cytokines, growth
//! factors, peptide/SubstanceProtein hormones, enzymes, toxins, toxoids,
//! recombinant vaccines, and immunomodulators
//!
//! FHIR R4: <https://hl7.org/fhir/R4/>
// The `types` import is unused by a handful of types that have only primitive fields.
#![allow(unused_imports)]
use crate::r4::types;
use ::serde::{Deserialize, Serialize};
use fhir_derive_macros::{Builder, Validate};
/// A SubstanceProtein is defined as a single unit of a linear amino acid
/// sequence, or a combination of subunits that are either covalently linked or
/// have a defined invariant stoichiometric relationship. This includes all
/// synthetic, recombinant and purified SubstanceProteins of defined sequence,
/// whether the use is therapeutic or prophylactic. This set of elements will
/// be used to describe albumins, coagulation factors, cytokines, growth
/// factors, peptide/SubstanceProtein hormones, enzymes, toxins, toxoids,
/// recombinant vaccines, and immunomodulators.
///
/// # Examples
///
/// ```
/// use fhir::r4::resources::substance_protein::SubstanceProtein;
///
/// let value = SubstanceProtein::default();
/// let json = ::serde_json::to_value(&value).unwrap();
/// let back: SubstanceProtein = ::serde_json::from_value(json).unwrap();
/// assert_eq!(value, back);
/// ```
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate, Builder)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct SubstanceProtein {
/// Logical id of this artifact
pub id: Option<types::String>,
/// Metadata about the resource
pub meta: Option<types::Meta>,
/// A set of rules under which this content was created
pub implicit_rules: Option<types::Uri>,
/// Primitive extension sibling for [`implicit_rules`](Self::implicit_rules) (FHIR `_implicitRules`):
/// carries `id` and/or `extension` for the primitive value.
#[serde(rename = "_implicitRules")]
pub implicit_rules_ext: Option<types::Element>,
/// Language of the resource content
pub language: Option<types::Code>,
/// Primitive extension sibling for [`language`](Self::language) (FHIR `_language`):
/// carries `id` and/or `extension` for the primitive value.
#[serde(rename = "_language")]
pub language_ext: Option<types::Element>,
/// Text summary of the resource, for human interpretation
pub text: Option<types::Narrative>,
/// Contained, inline Resources
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub contained: Vec<::serde_json::Value>,
/// Additional content defined by implementations
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
/// Extensions that cannot be ignored
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
/// The SubstanceProtein descriptive elements will only be used when a
/// complete or partial amino acid sequence is available or derivable from
/// a nucleic acid sequence
pub sequence_type: Option<types::CodeableConcept>,
/// Number of linear sequences of amino acids linked through peptide bonds.
/// The number of subunits constituting the SubstanceProtein shall be
/// described. It is possible that the number of subunits can be variable
pub number_of_subunits: Option<types::Integer>,
/// Primitive extension sibling for [`number_of_subunits`](Self::number_of_subunits) (FHIR `_numberOfSubunits`):
/// carries `id` and/or `extension` for the primitive value.
#[serde(rename = "_numberOfSubunits")]
pub number_of_subunits_ext: Option<types::Element>,
/// The disulphide bond between two cysteine residues either on the same
/// subunit or on two different subunits shall be described. The position
/// of the disulfide bonds in the SubstanceProtein shall be listed in
/// increasing order of subunit number and position within subunit followed
/// by the abbreviation of the amino acids involved. The disulfide linkage
/// positions shall actually contain the amino acid Cysteine at the
/// respective positions
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub disulfide_linkage: Vec<types::String>,
/// Primitive extension sibling for [`disulfide_linkage`](Self::disulfide_linkage) (FHIR `_disulfideLinkage`):
/// carries `id` and/or `extension` for the primitive value.
#[serde(rename = "_disulfideLinkage")]
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub disulfide_linkage_ext: Vec<Option<types::Element>>,
/// This subclause refers to the description of each subunit constituting
/// the SubstanceProtein. A subunit is a linear sequence of amino acids
/// linked through peptide bonds. The Subunit information shall be provided
/// when the finished SubstanceProtein is a complex of multiple sequences;
/// subunits are not used to delineate domains within a single sequence.
/// Subunits are listed in order of decreasing length; sequences of the
/// same length will be ordered by decreasing molecular weight; subunits
/// that have identical sequences will be repeated multiple times
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub subunit: Vec<SubstanceProteinSubunit>,
}
/// This subclause refers to the description of each subunit constituting the
/// SubstanceProtein. A subunit is a linear sequence of amino acids linked
/// through peptide bonds. The Subunit information shall be provided when the
/// finished SubstanceProtein is a complex of multiple sequences; subunits are
/// not used to delineate domains within a single sequence. Subunits are listed
/// in order of decreasing length; sequences of the same length will be ordered
/// by decreasing molecular weight; subunits that have identical sequences will
/// be repeated multiple times.
///
/// # Examples
///
/// ```
/// use fhir::r4::resources::substance_protein::SubstanceProteinSubunit;
///
/// let value = SubstanceProteinSubunit::default();
/// let json = ::serde_json::to_value(&value).unwrap();
/// let back: SubstanceProteinSubunit = ::serde_json::from_value(json).unwrap();
/// assert_eq!(value, back);
/// ```
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
#[fhir_version("r4")]
pub struct SubstanceProteinSubunit {
/// Unique id for inter-element referencing
pub id: Option<types::String>,
/// Additional content defined by implementations
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub extension: Vec<types::Extension>,
/// Extensions that cannot be ignored even if unrecognized
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub modifier_extension: Vec<types::Extension>,
/// Index of primary sequences of amino acids linked through peptide bonds
/// in order of decreasing length. Sequences of the same length will be
/// ordered by molecular weight. Subunits that have identical sequences
/// will be repeated and have sequential subscripts
pub subunit: Option<types::Integer>,
/// Primitive extension sibling for [`subunit`](Self::subunit) (FHIR `_subunit`):
/// carries `id` and/or `extension` for the primitive value.
#[serde(rename = "_subunit")]
pub subunit_ext: Option<types::Element>,
/// The sequence information shall be provided enumerating the amino acids
/// from N- to C-terminal end using standard single-letter amino acid
/// codes. Uppercase shall be used for L-amino acids and lowercase for
/// D-amino acids. Transcribed SubstanceProteins will always be described
/// using the translated sequence; for synthetic peptide containing amino
/// acids that are not represented with a single letter code an X should be
/// used within the sequence. The modified amino acids will be
/// distinguished by their position in the sequence
pub sequence: Option<types::String>,
/// Primitive extension sibling for [`sequence`](Self::sequence) (FHIR `_sequence`):
/// carries `id` and/or `extension` for the primitive value.
#[serde(rename = "_sequence")]
pub sequence_ext: Option<types::Element>,
/// Length of linear sequences of amino acids contained in the subunit
pub length: Option<types::Integer>,
/// Primitive extension sibling for [`length`](Self::length) (FHIR `_length`):
/// carries `id` and/or `extension` for the primitive value.
#[serde(rename = "_length")]
pub length_ext: Option<types::Element>,
/// The sequence information shall be provided enumerating the amino acids
/// from N- to C-terminal end using standard single-letter amino acid
/// codes. Uppercase shall be used for L-amino acids and lowercase for
/// D-amino acids. Transcribed SubstanceProteins will always be described
/// using the translated sequence; for synthetic peptide containing amino
/// acids that are not represented with a single letter code an X should be
/// used within the sequence. The modified amino acids will be
/// distinguished by their position in the sequence
pub sequence_attachment: Option<types::Attachment>,
/// Unique identifier for molecular fragment modification based on the ISO
/// 11238 Substance ID
pub n_terminal_modification_id: Option<types::Identifier>,
/// The name of the fragment modified at the N-terminal of the
/// SubstanceProtein shall be specified
pub n_terminal_modification: Option<types::String>,
/// Primitive extension sibling for [`n_terminal_modification`](Self::n_terminal_modification) (FHIR `_nTerminalModification`):
/// carries `id` and/or `extension` for the primitive value.
#[serde(rename = "_nTerminalModification")]
pub n_terminal_modification_ext: Option<types::Element>,
/// Unique identifier for molecular fragment modification based on the ISO
/// 11238 Substance ID
pub c_terminal_modification_id: Option<types::Identifier>,
/// The modification at the C-terminal shall be specified
pub c_terminal_modification: Option<types::String>,
/// Primitive extension sibling for [`c_terminal_modification`](Self::c_terminal_modification) (FHIR `_cTerminalModification`):
/// carries `id` and/or `extension` for the primitive value.
#[serde(rename = "_cTerminalModification")]
pub c_terminal_modification_ext: Option<types::Element>,
}
#[cfg(test)]
mod tests {
use super::*;
type T = SubstanceProtein;
#[test]
fn test_default() {
let _ = T::default();
}
#[test]
fn test_serde_round_trip() {
let value = T::default();
let json = ::serde_json::to_value(&value).expect("to_value");
let back: T = ::serde_json::from_value(json).expect("from_value");
assert_eq!(value, back);
}
}