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
//! SubscriptionStatus
//!
//! URL: http://hl7.org/fhir/StructureDefinition/SubscriptionStatus
//!
//! Version: 5.0.0
//!
//! SubscriptionStatus Resource: The SubscriptionStatus resource describes the state of a Subscription during notifications. It is not persisted.
//!
//! 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;
/// SubscriptionStatus is a status resource that conveys the current state of a
/// Subscription and is delivered as part of notification bundles. It is not
/// persisted on the server; instead it is generated for each notification to
/// report the subscription's status, the type of notification, and details
/// about the events that triggered it. It also carries any errors relevant to
/// the subscription.
///
/// In practice a server sends a SubscriptionStatus as the first entry of every
/// notification bundle it delivers for a subscription, whether that
/// notification is a handshake confirming the channel is ready, a periodic
/// heartbeat, an event notification carrying matching resources, or the
/// response to a query-status request. Clients use the `status`, `type`, and
/// `events_since_subscription_start` fields to track delivery health and
/// detect missed events, and use `notification_event` to correlate the
/// notification with the resources that triggered it.
///
/// # Related resources
///
/// - `Subscription` — the criteria and channel configuration this status reports on.
/// - `SubscriptionTopic` — the topic definition referenced by `topic`.
/// - [`Reference`](crate::r5::types::Reference) — used by `subscription` and event `focus`/`additional_context`.
/// - [`CodeableConcept`](crate::r5::types::CodeableConcept) — used to represent entries in `error`.
///
/// # Examples
///
/// ```
/// use fhir::r5::resources::subscription_status::SubscriptionStatus;
///
/// let value = SubscriptionStatus::default();
/// let json = ::serde_json::to_value(&value).unwrap();
/// let back: SubscriptionStatus = ::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 SubscriptionStatus {
/// 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>>,
/// Current state of the underlying Subscription: requested | active | error | off | entered-in-error.
pub status: Option<types::Code>,
/// Kind of notification this resource represents: handshake | heartbeat | event-notification | query-status | query-event.
pub r#type: types::Code,
/// Running count of events delivered since the Subscription was created, useful for detecting gaps.
pub events_since_subscription_start: Option<types::Integer64>,
/// Detailed information about any events relevant to this notification
pub notification_event: Option<Vec<SubscriptionStatusNotificationEvent>>,
/// Reference to the Subscription responsible for this notification
pub subscription: types::Reference,
/// Canonical reference to the SubscriptionTopic this notification relates to
pub topic: Option<types::Canonical>,
/// List of errors on the subscription, if any occurred while generating the notification
pub error: Option<Vec<types::CodeableConcept>>,
}
/// Detailed information about any events relevant to this notification.
#[serde_with::skip_serializing_none]
#[derive(Debug, Default, Clone, Serialize, Deserialize, PartialEq, Eq, Validate)]
#[serde(rename_all = "camelCase")]
pub struct SubscriptionStatusNotificationEvent {
/// 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>>,
/// Sequencing index of this event
pub event_number: types::Integer64,
/// The instant this event occurred
pub timestamp: Option<types::Instant>,
/// Reference to the primary resource or information of this event
pub focus: Option<types::Reference>,
/// References related to the focus resource and/or context of this event
pub additional_context: Option<Vec<types::Reference>>,
}
#[cfg(test)]
mod tests {
use super::*;
type T = SubscriptionStatus;
#[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);
}
}