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
//! Endpoint
//!
//! URL: http://hl7.org/fhir/StructureDefinition/Endpoint
//!
//! Version: 5.0.0
//!
//! Endpoint Resource: The technical details of an endpoint that can be used for electronic services.
//!
//! FHIR: <https://build.fhir.org/>
//!
//! UML: <https://build.fhir.org/uml.html>
// Allow unused crate::r5::types as types;
#![allow(unused_imports)]
use crate::r5::types;
use ::serde::{Deserialize, Serialize};
use fhir_derive_macros::Validate;
/// The technical details of an endpoint that can be used for electronic
/// services, such as for web services providing XDS.b, a REST endpoint for
/// another FHIR server, or a s/Mime email address. This may include any
/// security context information. In FHIR R5 an Endpoint describes how to
/// connect to a system, the protocols it uses, the payloads it accepts, and the
/// organization that manages it.
///
/// Endpoint is primarily an administrative/technical resource rather than a
/// clinical one: it is referenced by other resources (for example a
/// `Subscription`, a `HealthcareService`, or an exchange-related resource)
/// wherever an application needs to know where and how to send or retrieve
/// data electronically. A single Endpoint typically records the address
/// (URL or other technical address), the connection type/protocol, the
/// accepted payload types and MIME types, and the organization responsible
/// for the endpoint's operation, along with an interval during which the
/// endpoint is expected to be usable.
///
/// # See also
///
/// - [`types::Reference`] is commonly used by other resources to point at an
/// `Endpoint`.
/// - [`types::CodeableConcept`] is used here to describe the connection type
/// and environment type.
/// - [`types::Period`] describes the interval during which the endpoint is
/// expected to be operational.
///
/// # Examples
///
/// ```
/// use fhir::r5::resources::endpoint::Endpoint;
///
/// let value = Endpoint::default();
/// let json = ::serde_json::to_value(&value).unwrap();
/// let back: Endpoint = ::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")]
pub struct Endpoint {
/// 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>,
/// Language of the resource content
pub language: Option<types::Code>,
/// Text summary of the resource, for human interpretation
pub text: Option<types::Narrative>,
/// Contained, inline Resources
pub contained: Option<Vec<::serde_json::Value>>,
/// Additional content defined by implementations
pub extension: Option<Vec<types::Extension>>,
/// Extensions that cannot be ignored
pub modifier_extension: Option<Vec<types::Extension>>,
/// Identifies this endpoint across multiple systems
pub identifier: Option<Vec<types::Identifier>>,
/// The current operational status of the endpoint: active | suspended |
/// error | off | entered-in-error | test
pub status: types::Code,
/// One or more protocols, profiles, or standards used to connect to and
/// exchange data with this endpoint (for example a messaging or REST
/// protocol)
pub connection_type: Vec<types::CodeableConcept>,
/// A human-friendly name that this endpoint can be identified by
pub name: Option<types::String>,
/// Additional details about the endpoint that could be displayed as further
/// information to identify the description beyond its name
pub description: Option<types::String>,
/// The type of environment(s) exposed at this endpoint
pub environment_type: Option<Vec<types::CodeableConcept>>,
/// Organization that manages this endpoint (might not be the organization
/// that exposes the endpoint)
pub managing_organization: Option<types::Reference>,
/// Contact details for source (e.g. troubleshooting)
pub contact: Option<Vec<types::ContactPoint>>,
/// Interval the endpoint is expected to be operational
pub period: Option<types::Period>,
/// Set of payloads that are provided by this endpoint
pub payload: Option<Vec<EndpointPayload>>,
/// The technical base address for connecting to this endpoint
pub address: types::Url,
/// Usage depends on the channel type
pub header: Option<Vec<types::String>>,
}
/// Set of payloads that are provided by this endpoint. Each payload describes
/// the type of content and the MIME types that may be sent to or received from
/// the endpoint.
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
pub struct EndpointPayload {
/// Unique id for inter-element referencing
pub id: Option<types::String>,
/// Additional content defined by implementations
pub extension: Option<Vec<types::Extension>>,
/// Extensions that cannot be ignored even if unrecognized
pub modifier_extension: Option<Vec<types::Extension>>,
/// The type of content that may be used at this endpoint (e.g. XDS
/// Discharge summaries)
pub r#type: Option<Vec<types::CodeableConcept>>,
/// Mimetype to send. If not specified, the content could be anything
/// (including no payload, if the connectionType defined this)
pub mime_type: Option<Vec<types::Code>>,
}
#[cfg(test)]
mod tests {
use super::*;
type T = Endpoint;
#[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);
}
}