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
use Arc;
use crateResult;
use ActivationGate;
/// Outcome of a managed publish attempt.
///
/// # Semantics
/// - [`PublishOutcome::Published`]: the activation gate was active and the message
/// was passed through to the underlying `rclrs::Publisher`.
/// - [`PublishOutcome::SuppressedInactive`]: the activation gate was inactive and
/// the message was dropped (no ROS publish occurs).
///
/// # Errors
/// This type does not represent transport errors. Any error from the underlying
/// `rclrs::Publisher::publish` is returned by
/// [`ManagedPublisher::publish_with_outcome`].
///
/// # Example
/// ```rust,ignore
/// match publisher.publish_with_outcome(msg)? {
/// PublishOutcome::Published => {}
/// PublishOutcome::SuppressedInactive => {
/// // Node is not Active; message was intentionally suppressed.
/// }
/// }
/// ```
///
/// # See also
/// - [`ManagedPublisher`]
/// A lifecycle-gated publisher wrapper.
///
/// # Semantics
/// - While the lifecycle is `Active`, publishes are forwarded to the underlying
/// `rclrs::Publisher`.
/// - While not `Active`, publishes are *suppressed* (silently dropped).
///
/// This behavior matches ROS 2 “managed entity” expectations: data-plane output
/// is stopped while inactive.
///
/// # Errors
/// - [`ManagedPublisher::publish`] and [`ManagedPublisher::publish_with_outcome`]
/// return an error only when the gate is active and the underlying publish call
/// fails.
///
/// # Example
/// ```rust,ignore
/// let publisher = lifecycle.create_publisher::<rosrustext_rosrs::lifecycle_msgs::msg::State>("state")?;
/// publisher.publish(rosrustext_rosrs::lifecycle_msgs::msg::State::default())?;
/// ```
///
/// # See also
/// - [`crate::lifecycle::LifecycleNode::create_publisher`]
/// - [Lifecycle spec](https://github.com/convyares-FCSL/rosrustext/blob/main/docs/spec/lifecycle.md)