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