xref: /openbmc/sdbusplus/include/sdbusplus/server/manager.hpp (revision 9d8ba9473a5f118e854d0ec326a4275ce57b1e7b)
1 #pragma once
2 
3 #include <sdbusplus/bus.hpp>
4 #include <sdbusplus/sdbus.hpp>
5 #include <sdbusplus/slot.hpp>
6 
7 namespace sdbusplus
8 {
9 
10 namespace server
11 {
12 
13 namespace manager
14 {
15 
16 /** @class manager
17  *  @brief Provide a C++ holder for a sd-bus object manager.
18  *
19  *  Wraps sd_bus_add_object_manager so that an sd-bus owned object manager
20  *  can be installed at a path and automatically removed when destructed.
21  */
22 struct manager : private sdbusplus::bus::details::bus_friend
23 {
24   private:
25     slot_t _slot;
26 
makeManagersdbusplus::server::manager::manager27     static slot_t makeManager(SdBusInterface* intf, sd_bus* bus,
28                               const char* path)
29     {
30         sd_bus_slot* slot = nullptr;
31         intf->sd_bus_add_object_manager(bus, &slot, path);
32         return slot_t{slot, intf};
33     }
34 
35   public:
36     /** @brief Register an object manager at a path.
37      *
38      *  @param[in] bus - The bus to register on.
39      *  @param[in] path - The path to register.
40      */
managersdbusplus::server::manager::manager41     manager(sdbusplus::bus_t& bus, const char* path) :
42         _slot(makeManager(bus.getInterface(), get_busp(bus), path))
43     {}
44 };
45 
46 } // namespace manager
47 
48 using manager_t = manager::manager;
49 
50 } // namespace server
51 } // namespace sdbusplus
52