blob: e2e620ad182d7afd53413eb8027e90095bd61060 [file] [log] [blame]
Alexander Hansen449e7932025-03-03 17:20:04 +01001#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
9PHOSPHOR_LOG2_USING;
10
11template <typename T>
12sdbusplus::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}