1 #pragma once 2 3 #include <string> 4 #include <sdbusplus/bus.hpp> 5 6 namespace settings 7 { 8 9 using Path = std::string; 10 using Service = std::string; 11 using Interface = std::string; 12 13 constexpr auto root = "/"; 14 15 /** @class Objects 16 * @brief Fetch paths of settings d-bus objects of interest, upon construction 17 */ 18 struct Objects 19 { 20 public: 21 /** @brief Constructor - fetch settings objects 22 * 23 * @param[in] bus - The Dbus bus object 24 * @param[in] filter - A vector of settings interfaces the caller is 25 * interested in. 26 */ 27 Objects(sdbusplus::bus::bus& bus, const std::vector<Interface>& filter); 28 Objects(const Objects&) = default; 29 Objects& operator=(const Objects&) = default; 30 Objects(Objects&&) = delete; 31 Objects& operator=(Objects&&) = delete; 32 ~Objects() = default; 33 34 /** @brief Fetch d-bus service, given a path and an interface. The 35 * service can't be cached because mapper returns unique 36 * service names. 37 * 38 * @param[in] path - The Dbus object 39 * @param[in] interface - The Dbus interface 40 * 41 * @return std::string - the dbus service 42 */ 43 Service service(const Path& path, const Interface& interface) const; 44 45 // TODO openbmc/openbmc#2058 - This will break when multiple settings, 46 // or in general multiple objects implement a single setting interface. 47 // For instance this will break for a 2-blade server, because we'd have 48 // 2 sets of settings objects. Need to revisit and fix this. 49 /** @brief map of settings objects */ 50 std::map<Interface, Path> map; 51 52 /** @brief The Dbus bus object */ 53 sdbusplus::bus::bus& bus; 54 }; 55 56 } // namespace settings 57