1 #pragma once 2 3 #include <sdbusplus/bus.hpp> 4 #include <string> 5 #include <tuple> 6 7 namespace settings 8 { 9 10 using Path = std::string; 11 using Service = std::string; 12 using Interface = std::string; 13 14 constexpr auto root = "/"; 15 16 /** @class Objects 17 * @brief Fetch paths of settings d-bus objects of interest, upon construction 18 */ 19 struct Objects 20 { 21 public: 22 /** @brief Constructor - fetch settings objects 23 * 24 * @param[in] bus - The Dbus bus object 25 * @param[in] filter - A vector of settings interfaces the caller is 26 * interested in. 27 */ 28 Objects(sdbusplus::bus::bus& bus, const std::vector<Interface>& filter); 29 Objects(const Objects&) = default; 30 Objects& operator=(const Objects&) = default; 31 Objects(Objects&&) = delete; 32 Objects& operator=(Objects&&) = delete; 33 ~Objects() = default; 34 35 /** @brief Fetch d-bus service, given a path and an interface. The 36 * service can't be cached because mapper returns unique 37 * service names. 38 * 39 * @param[in] path - The Dbus object 40 * @param[in] interface - The Dbus interface 41 * 42 * @return std::string - the dbus service 43 */ 44 Service service(const Path& path, const Interface& interface) const; 45 46 /** @brief map of settings objects */ 47 std::map<Interface, std::vector<Path>> map; 48 49 /** @brief The Dbus bus object */ 50 sdbusplus::bus::bus& bus; 51 }; 52 53 namespace boot 54 { 55 56 using OneTimeEnabled = bool; 57 58 /** @brief Return the one-time boot setting object path if enabled, otherwise 59 * the regular boot setting object path. 60 * 61 * @param[in] objects - const reference to an object of type Objects 62 * @param[in] iface - boot setting interface 63 * 64 * @return A tuple - boot setting object path, a bool indicating whether the 65 * returned path corresponds to the one time boot setting. 66 */ 67 std::tuple<Path, OneTimeEnabled> setting(const Objects& objects, 68 const Interface& iface); 69 70 } // namespace boot 71 72 } // namespace settings 73