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_t& 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_t& 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