1515
1616#include < score/expected.hpp>
1717#include < score/hm/common.h>
18+ #include < functional>
1819
1920namespace score ::hm
2021{
2122// Forward declaration
2223class HealthMonitor ;
24+ class HealthMonitorBuilder ;
2325} // namespace score::hm
2426
2527namespace score ::hm::deadline
@@ -31,7 +33,7 @@ class DeadlineHandle;
3133class Deadline ;
3234
3335// / DeadlineMonitorBuilder for constructing DeadlineMonitor instance
34- class DeadlineMonitorBuilder : public internal ::RustDroppable<DeadlineMonitorBuilder>
36+ class DeadlineMonitorBuilder final : public internal::RustDroppable<DeadlineMonitorBuilder>
3537{
3638 public:
3739 // / Creates a new DeadlineMonitorBuilder
@@ -46,16 +48,23 @@ class DeadlineMonitorBuilder : public internal::RustDroppable<DeadlineMonitorBui
4648 // / Adds a deadline with the given tag and duration range to the monitor.
4749 DeadlineMonitorBuilder add_deadline (const IdentTag& tag, const TimeRange& range) &&;
4850
49- ::score::cpp::optional<internal::FFIHandle> __drop_by_rust_impl ()
51+ protected:
52+ std::optional<internal::FFIHandle> __drop_by_rust_impl ()
5053 {
5154 return monitor_builder_handler_.drop_by_rust ();
5255 }
5356
5457 private:
5558 internal::DroppableFFIHandle monitor_builder_handler_;
59+
60+ // Allow to hide drop_by_rust implementation
61+ friend class internal ::RustDroppable<DeadlineMonitorBuilder>;
62+
63+ // Allow HealthMonitorBuilder to access drop_by_rust implementation
64+ friend class ::score::hm::HealthMonitorBuilder;
5665};
5766
58- class DeadlineMonitor
67+ class DeadlineMonitor final
5968{
6069 public:
6170 // Delete copy, allow move
@@ -70,12 +79,13 @@ class DeadlineMonitor
7079 private:
7180 explicit DeadlineMonitor (internal::FFIHandle handle);
7281
82+ // Allow only HealthMonitor to create DeadlineMonitor instances.
7383 friend class score ::hm::HealthMonitor;
7484 internal::DroppableFFIHandle monitor_handle_;
7585};
7686
7787// / Deadline instance representing a specific deadline to be monitored.
78- class Deadline
88+ class Deadline final
7989{
8090 public:
8191 ~Deadline ();
@@ -93,14 +103,17 @@ class Deadline
93103 private:
94104 explicit Deadline (internal::FFIHandle handle);
95105
106+ // Allow only DeadlineMonitor to create Deadline instances.
96107 friend class DeadlineMonitor ;
108+
109+ // Allow DeadlineHandle to access internal members as its wrapper type only
97110 friend class DeadlineHandle ;
98111 internal::DroppableFFIHandle deadline_handle_;
99112 bool has_handle_;
100113};
101114
102115// / Deadline guard to manage the lifetime of a started deadline.
103- class DeadlineHandle
116+ class DeadlineHandle final
104117{
105118 public:
106119 // / Stops the deadline monitoring.
@@ -118,9 +131,10 @@ class DeadlineHandle
118131 private:
119132 DeadlineHandle (Deadline& deadline);
120133
134+ // Allow only Deadline to create DeadlineHandle instances.
121135 friend class Deadline ;
122136 bool was_stopped_;
123- ::score::cpp ::optional<std::reference_wrapper<Deadline>> deadline_;
137+ std ::optional<std::reference_wrapper<Deadline>> deadline_;
124138};
125139
126140} // namespace score::hm::deadline
0 commit comments