blob: 3a0bdb74d64f29c6d25582dc04f723ebafd85a7b [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.
82 * @param[in] offset - Offset within object for property.
83 * @param[in] flags - optional sdbusplus::vtable::property_ value.
84 */
85constexpr vtable_t property_o(const char* member, const char* signature,
86 size_t offset,
87 decltype(vtable_t::flags) flags = 0);
88
89/** Create a SD_BUS_WRITABLE_PROPERTY entry.
90 *
91 * @param[in] member - Name of signal.
92 * @param[in] signature - Signature of signal.
93 * @param[in] set - Functor to call on property set.
94 * @param[in] offset - Offset within object for property.
95 * @param[in] flags - optional sdbusplus::vtable::property_ value.
96 */
97constexpr vtable_t property_o(const char* member, const char* signature,
98 sd_bus_property_set_t set, size_t offset,
99 decltype(vtable_t::flags) flags = 0);
100
Waqar Hameed3e3a6652020-06-04 10:51:18 +0200101namespace common_
102{
103constexpr auto deprecated = SD_BUS_VTABLE_DEPRECATED;
104constexpr auto hidden = SD_BUS_VTABLE_HIDDEN;
105constexpr auto unprivileged = SD_BUS_VTABLE_UNPRIVILEGED;
106} // namespace common_
107
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500108namespace method_
109{
Andrew Geissler072da3e2018-01-18 07:21:42 -0800110constexpr auto no_reply = SD_BUS_VTABLE_METHOD_NO_REPLY;
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500111} // namespace method_
112
113namespace property_
114{
Andrew Geissler072da3e2018-01-18 07:21:42 -0800115constexpr auto const_ = SD_BUS_VTABLE_PROPERTY_CONST;
116constexpr auto emits_change = SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE;
117constexpr auto emits_invalidation = SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION;
118constexpr auto explicit_ = SD_BUS_VTABLE_PROPERTY_EXPLICIT;
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500119} // namespace property_
120
121constexpr vtable_t start(decltype(vtable_t::flags) flags)
122{
Lei YU58d2c912020-02-18 12:41:24 +0800123 return vtable_t SD_BUS_VTABLE_START(flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500124}
125
126constexpr vtable_t end()
127{
Lei YU58d2c912020-02-18 12:41:24 +0800128 return vtable_t SD_BUS_VTABLE_END;
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500129}
130
131constexpr vtable_t method(const char* member, const char* signature,
132 const char* result, sd_bus_message_handler_t handler,
133 decltype(vtable_t::flags) flags)
134{
Lei YU58d2c912020-02-18 12:41:24 +0800135 return vtable_t SD_BUS_METHOD(member, signature, result, handler, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500136}
137
Patrick Williamscb922df2016-10-17 14:55:20 -0500138constexpr vtable_t method_o(const char* member, const char* signature,
139 const char* result,
Andrew Geissler072da3e2018-01-18 07:21:42 -0800140 sd_bus_message_handler_t handler, size_t offset,
141 decltype(vtable_t::flags) flags)
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500142{
Lei YU58d2c912020-02-18 12:41:24 +0800143 return vtable_t SD_BUS_METHOD_WITH_OFFSET(member, signature, result,
144 handler, offset, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500145}
146
147constexpr vtable_t signal(const char* member, const char* signature,
148 decltype(vtable_t::flags) flags)
149{
Lei YU58d2c912020-02-18 12:41:24 +0800150 return vtable_t SD_BUS_SIGNAL(member, signature, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500151}
152
153constexpr vtable_t property(const char* member, const char* signature,
154 sd_bus_property_get_t get,
155 decltype(vtable_t::flags) flags)
156{
Lei YU58d2c912020-02-18 12:41:24 +0800157 return vtable_t SD_BUS_PROPERTY(member, signature, get, 0, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500158}
159
160constexpr vtable_t property(const char* member, const char* signature,
161 sd_bus_property_get_t get,
162 sd_bus_property_set_t set,
163 decltype(vtable_t::flags) flags)
164{
Lei YU58d2c912020-02-18 12:41:24 +0800165 return vtable_t SD_BUS_WRITABLE_PROPERTY(member, signature, get, set, 0,
166 flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500167}
168
169constexpr vtable_t property_o(const char* member, const char* signature,
Andrew Geissler072da3e2018-01-18 07:21:42 -0800170 size_t offset, decltype(vtable_t::flags) flags)
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500171{
Lei YU58d2c912020-02-18 12:41:24 +0800172 return vtable_t SD_BUS_PROPERTY(member, signature, nullptr, offset, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500173}
174
175constexpr vtable_t property_o(const char* member, const char* signature,
176 sd_bus_property_set_t set, size_t offset,
177 decltype(vtable_t::flags) flags)
178{
Lei YU58d2c912020-02-18 12:41:24 +0800179 return vtable_t SD_BUS_WRITABLE_PROPERTY(member, signature, nullptr, set,
180 offset, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500181}
182
183} // namespace vtable
184
185} // namespace sdbusplus