| Alexander Hansen | 449e793 | 2025-03-03 17:20:04 +0100 | [diff] [blame] | 1 | #pragma once | 
|  | 2 |  | 
|  | 3 | #include <phosphor-logging/lg2.hpp> | 
|  | 4 | #include <sdbusplus/async.hpp> | 
|  | 5 | #include <sdbusplus/async/context.hpp> | 
|  | 6 |  | 
|  | 7 | #include <optional> | 
|  | 8 |  | 
|  | 9 | PHOSPHOR_LOG2_USING; | 
|  | 10 |  | 
|  | 11 | template <typename T> | 
|  | 12 | sdbusplus::async::task<std::optional<T>> dbusGetRequiredProperty( | 
|  | 13 | sdbusplus::async::context& ctx, const std::string& service, | 
|  | 14 | const std::string& path, const std::string& intf, | 
|  | 15 | const std::string& property) | 
|  | 16 | { | 
|  | 17 | auto client = | 
|  | 18 | sdbusplus::async::proxy().service(service).path(path).interface( | 
|  | 19 | "org.freedesktop.DBus.Properties"); | 
|  | 20 |  | 
|  | 21 | std::optional<T> opt = std::nullopt; | 
|  | 22 | try | 
|  | 23 | { | 
|  | 24 | std::variant<T> result = | 
|  | 25 | co_await client.call<std::variant<T>>(ctx, "Get", intf, property); | 
|  | 26 |  | 
|  | 27 | opt = std::get<T>(result); | 
|  | 28 | } | 
|  | 29 | catch (std::exception& e) | 
|  | 30 | { | 
|  | 31 | error("Missing property {PROPERTY} on path {PATH}, interface {INTF}", | 
|  | 32 | "PROPERTY", property, "PATH", path, "INTF", intf); | 
|  | 33 | } | 
|  | 34 | co_return opt; | 
|  | 35 | } |