1 #pragma once
2 
3 #include <string>
4 #include <tuple>
5 #include <sdbusplus/bus.hpp>
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