1#pragma once 2#include <sdbusplus/async/client.hpp> 3#include <type_traits> 4 5% for h in interface.cpp_includes(): 6#include <${h}> 7% endfor 8#include <${interface.headerFile("common")}> 9 10#ifndef SDBUSPP_REMOVE_DEPRECATED_NAMESPACE 11namespace sdbusplus::${interface.old_cppNamespacedClass("client")} 12{ 13 14constexpr auto interface = 15 sdbusplus::common::${interface.cppNamespacedClass()}::interface; 16 17} // namespace sdbusplus::${interface.old_cppNamespacedClass("client")} 18#endif 19 20namespace sdbusplus::client::${interface.cppNamespace()} 21{ 22 23namespace details 24{ 25 26template <typename Proxy> 27class ${interface.classname} : 28 public sdbusplus::common::${interface.cppNamespacedClass()} 29{ 30 public: 31 template <bool S, bool P, bool Preserved, 32 template <typename> typename... Types> 33 friend class sdbusplus::async::client::client; 34 // Delete default constructor as these should only be constructed 35 // indirectly through sdbusplus::async::client_t. 36 ${interface.classname}() = delete; 37 38 % for m in interface.methods: 39${m.render(loader, "method.client.hpp.mako", method=m, interface=interface)} 40 % endfor 41 % for p in interface.properties: 42${p.render(loader, "property.client.hpp.mako", property=p, interface=interface)} 43 % endfor 44 private: 45 // Conversion constructor from proxy used by client_t. 46 constexpr ${interface.classname}(sdbusplus::async::context& ctx, Proxy p) : 47 ctx(ctx), proxy(p.interface(interface)) {} 48 49 sdbusplus::async::context& ctx{}; 50 decltype(std::declval<Proxy>().interface(interface)) proxy = {}; 51}; 52 53} // namespace details 54 55/** Alias class so we can use the client in both a client_t aggregation 56 * and individually. 57 * 58 * sdbusplus::async::client_t<${interface.classname}>() or 59 * ${interface.classname}() both construct an equivalent instance. 60 */ 61template <typename Proxy = void> 62struct ${interface.classname} : public 63 std::conditional_t< 64 std::is_void_v<Proxy>, 65 sdbusplus::async::client_t<details::${interface.classname}>, 66 details::${interface.classname}<Proxy>> 67{ 68 template <typename... Args> 69 ${interface.classname}(Args&&... args) : 70 std::conditional_t<std::is_void_v<Proxy>, 71 sdbusplus::async::client_t<details::${interface.classname}>, 72 details::${interface.classname}<Proxy>>( 73 std::forward<Args>(args)...) 74 {} 75}; 76 77} // namespace sdbusplus::client::${interface.cppNamespacedClass()} 78