@@ -18,6 +18,7 @@ extern "C" {
1818using namespace score ::hm;
1919using namespace score ::hm::internal;
2020using namespace score ::hm::deadline;
21+ using namespace score ::hm::heartbeat;
2122
2223// Functions below must match functions defined in `crate::ffi`.
2324
@@ -30,9 +31,15 @@ FFICode health_monitor_builder_build(FFIHandle health_monitor_builder_handle,
3031FFICode health_monitor_builder_add_deadline_monitor (FFIHandle health_monitor_builder_handle,
3132 const MonitorTag* monitor_tag,
3233 FFIHandle deadline_monitor_builder_handle);
34+ FFICode health_monitor_builder_add_heartbeat_monitor (FFIHandle health_monitor_builder_handle,
35+ const MonitorTag* monitor_tag,
36+ FFIHandle heartbeat_monitor_builder_handle);
3337FFICode health_monitor_get_deadline_monitor (FFIHandle health_monitor_handle,
3438 const MonitorTag* monitor_tag,
3539 FFIHandle* deadline_monitor_handle_out);
40+ FFICode health_monitor_get_heartbeat_monitor (FFIHandle health_monitor_handle,
41+ const MonitorTag* monitor_tag,
42+ FFIHandle* heartbeat_monitor_handle_out);
3643FFICode health_monitor_start (FFIHandle health_monitor_handle);
3744FFICode health_monitor_destroy (FFIHandle health_monitor_handle);
3845}
@@ -71,6 +78,20 @@ HealthMonitorBuilder HealthMonitorBuilder::add_deadline_monitor(const MonitorTag
7178 return std::move (*this );
7279}
7380
81+ HealthMonitorBuilder HealthMonitorBuilder::add_heartbeat_monitor (const MonitorTag& monitor_tag,
82+ HeartbeatMonitorBuilder&& monitor) &&
83+ {
84+ auto monitor_handle = monitor.drop_by_rust ();
85+ SCORE_LANGUAGE_FUTURECPP_PRECONDITION (monitor_handle.has_value ());
86+ SCORE_LANGUAGE_FUTURECPP_PRECONDITION (health_monitor_builder_handle_.as_rust_handle ().has_value ());
87+
88+ auto result{health_monitor_builder_add_heartbeat_monitor (
89+ health_monitor_builder_handle_.as_rust_handle ().value (), &monitor_tag, monitor_handle.value ())};
90+ SCORE_LANGUAGE_FUTURECPP_ASSERT (result == kSuccess );
91+
92+ return std::move (*this );
93+ }
94+
7495HealthMonitorBuilder HealthMonitorBuilder::with_internal_processing_cycle (std::chrono::milliseconds cycle_duration) &&
7596{
7697 internal_processing_cycle_duration_ = cycle_duration;
@@ -122,6 +143,18 @@ score::cpp::expected<DeadlineMonitor, Error> HealthMonitor::get_deadline_monitor
122143 return score::cpp::expected<DeadlineMonitor, Error>(DeadlineMonitor{handle});
123144}
124145
146+ score::cpp::expected<HeartbeatMonitor, Error> HealthMonitor::get_heartbeat_monitor (const MonitorTag& monitor_tag)
147+ {
148+ FFIHandle handle{nullptr };
149+ auto result{health_monitor_get_heartbeat_monitor (health_monitor_, &monitor_tag, &handle)};
150+ if (result != kSuccess )
151+ {
152+ return score::cpp::unexpected (static_cast <Error>(result));
153+ }
154+
155+ return score::cpp::expected<HeartbeatMonitor, Error>(HeartbeatMonitor{handle});
156+ }
157+
125158void HealthMonitor::start ()
126159{
127160 auto result{health_monitor_start (health_monitor_)};
0 commit comments