blob: f9d0c9e6d6b1cb5a200206adc41607e0247c8948 [file] [log] [blame]
Patrick Williams9d3ec7f2016-09-27 20:30:58 -05001#pragma once
2
3#include <systemd/sd-bus.h>
4
5namespace sdbusplus
6{
7
8namespace vtable
9{
Andrew Geissler072da3e2018-01-18 07:21:42 -080010/** Alias typedef for sd_bus_vtable */
Patrick Williams9d3ec7f2016-09-27 20:30:58 -050011using vtable_t = sd_bus_vtable;
12
Andrew Geissler072da3e2018-01-18 07:21:42 -080013/** Create a SD_BUS_VTABLE_START entry. */
Patrick Williams9d3ec7f2016-09-27 20:30:58 -050014constexpr vtable_t start(decltype(vtable_t::flags) flags = 0);
15
Andrew Geissler072da3e2018-01-18 07:21:42 -080016/** Create a SD_BUS_VTABLE_END entry. */
Patrick Williams9d3ec7f2016-09-27 20:30:58 -050017constexpr vtable_t end();
18
19/** Create a SD_BUS_VTABLE_METHOD entry.
20 *
21 * @param[in] member - Name of method.
22 * @param[in] signature - Signature of method.
23 * @param[in] result - Signature of result.
24 * @param[in] handler - Functor to call on method invocation.
25 * @param[in] flags - optional sdbusplus::vtable::method_ value.
26 */
27constexpr vtable_t method(const char* member, const char* signature,
28 const char* result, sd_bus_message_handler_t handler,
29 decltype(vtable_t::flags) flags = 0);
30
31/** Create a SD_BUS_VTABLE_METHOD_WITH_OFFSET entry.
32 *
33 * @param[in] member - Name of method.
34 * @param[in] signature - Signature of method.
35 * @param[in] result - Signature of result.
36 * @param[in] handler - Functor to call on method invocation.
37 * @param[in] offset - Offset.
38 * @param[in] flags - optional sdbusplus::vtable::method_ value.
39 */
Patrick Williamscb922df2016-10-17 14:55:20 -050040constexpr vtable_t method_o(const char* member, const char* signature,
41 const char* result,
Andrew Geissler072da3e2018-01-18 07:21:42 -080042 sd_bus_message_handler_t handler, size_t offset,
43 decltype(vtable_t::flags) flags = 0);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -050044
45/** Create a SD_BUS_SIGNAL entry.
46 *
47 * @param[in] member - Name of signal.
48 * @param[in] signature - Signature of signal.
49 * @param[in] flags - None supported.
50 */
51constexpr vtable_t signal(const char* member, const char* signature,
52 decltype(vtable_t::flags) flags = 0);
53
54/** Create a SD_BUS_PROPERTY entry.
55 *
56 * @param[in] member - Name of signal.
57 * @param[in] signature - Signature of signal.
58 * @param[in] get - Functor to call on property get.
59 * @param[in] flags - optional sdbusplus::vtable::property_ value.
60 */
61constexpr vtable_t property(const char* member, const char* signature,
62 sd_bus_property_get_t get,
63 decltype(vtable_t::flags) flags = 0);
64
65/** Create a SD_BUS_WRITABLE_PROPERTY entry.
66 *
67 * @param[in] member - Name of signal.
68 * @param[in] signature - Signature of signal.
69 * @param[in] get - Functor to call on property get.
70 * @param[in] set - Functor to call on property set.
71 * @param[in] flags - optional sdbusplus::vtable::property_ value.
72 */
73constexpr vtable_t property(const char* member, const char* signature,
74 sd_bus_property_get_t get,
75 sd_bus_property_set_t set,
76 decltype(vtable_t::flags) flags = 0);
77
78/** Create a SD_BUS_PROPERTY entry.
79 *
80 * @param[in] member - Name of signal.
81 * @param[in] signature - Signature of signal.
Ed Tanousda48d202023-03-08 09:49:55 -080082 * @param[in] get - Functor to call on property get.
Patrick Williams9d3ec7f2016-09-27 20:30:58 -050083 * @param[in] offset - Offset within object for property.
84 * @param[in] flags - optional sdbusplus::vtable::property_ value.
85 */
86constexpr vtable_t property_o(const char* member, const char* signature,
Ed Tanousda48d202023-03-08 09:49:55 -080087 sd_bus_property_get_t get, size_t offset,
Patrick Williams9d3ec7f2016-09-27 20:30:58 -050088 decltype(vtable_t::flags) flags = 0);
89
90/** Create a SD_BUS_WRITABLE_PROPERTY entry.
91 *
92 * @param[in] member - Name of signal.
93 * @param[in] signature - Signature of signal.
Ed Tanousda48d202023-03-08 09:49:55 -080094 * @param[in] get - Functor to call on property get.
Patrick Williams9d3ec7f2016-09-27 20:30:58 -050095 * @param[in] set - Functor to call on property set.
96 * @param[in] offset - Offset within object for property.
97 * @param[in] flags - optional sdbusplus::vtable::property_ value.
98 */
99constexpr vtable_t property_o(const char* member, const char* signature,
Ed Tanousda48d202023-03-08 09:49:55 -0800100 sd_bus_property_get_t get,
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500101 sd_bus_property_set_t set, size_t offset,
102 decltype(vtable_t::flags) flags = 0);
103
Waqar Hameed3e3a6652020-06-04 10:51:18 +0200104namespace common_
105{
106constexpr auto deprecated = SD_BUS_VTABLE_DEPRECATED;
107constexpr auto hidden = SD_BUS_VTABLE_HIDDEN;
108constexpr auto unprivileged = SD_BUS_VTABLE_UNPRIVILEGED;
109} // namespace common_
110
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500111namespace method_
112{
Andrew Geissler072da3e2018-01-18 07:21:42 -0800113constexpr auto no_reply = SD_BUS_VTABLE_METHOD_NO_REPLY;
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500114} // namespace method_
115
116namespace property_
117{
Andrew Geissler072da3e2018-01-18 07:21:42 -0800118constexpr auto const_ = SD_BUS_VTABLE_PROPERTY_CONST;
119constexpr auto emits_change = SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE;
120constexpr auto emits_invalidation = SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION;
121constexpr auto explicit_ = SD_BUS_VTABLE_PROPERTY_EXPLICIT;
Krzysztof Grobelny2be0e172020-07-27 11:12:07 +0200122constexpr auto none = decltype(vtable_t::flags){};
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500123} // namespace property_
124
125constexpr vtable_t start(decltype(vtable_t::flags) flags)
126{
Lei YU58d2c912020-02-18 12:41:24 +0800127 return vtable_t SD_BUS_VTABLE_START(flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500128}
129
130constexpr vtable_t end()
131{
Lei YU58d2c912020-02-18 12:41:24 +0800132 return vtable_t SD_BUS_VTABLE_END;
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500133}
134
135constexpr vtable_t method(const char* member, const char* signature,
136 const char* result, sd_bus_message_handler_t handler,
137 decltype(vtable_t::flags) flags)
138{
Lei YU58d2c912020-02-18 12:41:24 +0800139 return vtable_t SD_BUS_METHOD(member, signature, result, handler, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500140}
141
Patrick Williamscb922df2016-10-17 14:55:20 -0500142constexpr vtable_t method_o(const char* member, const char* signature,
143 const char* result,
Andrew Geissler072da3e2018-01-18 07:21:42 -0800144 sd_bus_message_handler_t handler, size_t offset,
145 decltype(vtable_t::flags) flags)
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500146{
Lei YU58d2c912020-02-18 12:41:24 +0800147 return vtable_t SD_BUS_METHOD_WITH_OFFSET(member, signature, result,
148 handler, offset, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500149}
150
151constexpr vtable_t signal(const char* member, const char* signature,
152 decltype(vtable_t::flags) flags)
153{
Lei YU58d2c912020-02-18 12:41:24 +0800154 return vtable_t SD_BUS_SIGNAL(member, signature, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500155}
156
157constexpr vtable_t property(const char* member, const char* signature,
158 sd_bus_property_get_t get,
159 decltype(vtable_t::flags) flags)
160{
Lei YU58d2c912020-02-18 12:41:24 +0800161 return vtable_t SD_BUS_PROPERTY(member, signature, get, 0, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500162}
163
164constexpr vtable_t property(const char* member, const char* signature,
165 sd_bus_property_get_t get,
166 sd_bus_property_set_t set,
167 decltype(vtable_t::flags) flags)
168{
Lei YU58d2c912020-02-18 12:41:24 +0800169 return vtable_t SD_BUS_WRITABLE_PROPERTY(member, signature, get, set, 0,
170 flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500171}
172
173constexpr vtable_t property_o(const char* member, const char* signature,
Ed Tanousda48d202023-03-08 09:49:55 -0800174 sd_bus_property_get_t get, size_t offset,
175 decltype(vtable_t::flags) flags)
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500176{
Ed Tanousda48d202023-03-08 09:49:55 -0800177 return vtable_t SD_BUS_PROPERTY(member, signature, get, offset, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500178}
179
180constexpr vtable_t property_o(const char* member, const char* signature,
Ed Tanousda48d202023-03-08 09:49:55 -0800181 sd_bus_property_get_t get,
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500182 sd_bus_property_set_t set, size_t offset,
183 decltype(vtable_t::flags) flags)
184{
Ed Tanousda48d202023-03-08 09:49:55 -0800185 return vtable_t SD_BUS_WRITABLE_PROPERTY(member, signature, get, set,
Lei YU58d2c912020-02-18 12:41:24 +0800186 offset, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500187}
188
189} // namespace vtable
190
Patrick Williamsa735ca52021-11-19 11:36:18 -0600191using vtable_t = vtable::vtable_t;
192
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500193} // namespace sdbusplus