blob: 09dbfc6880a6315c3b2daf12eba0731db4ffde26 [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;
Krzysztof Grobelny2be0e172020-07-27 11:12:07 +0200119constexpr auto none = decltype(vtable_t::flags){};
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500120} // namespace property_
121
122constexpr vtable_t start(decltype(vtable_t::flags) flags)
123{
Lei YU58d2c912020-02-18 12:41:24 +0800124 return vtable_t SD_BUS_VTABLE_START(flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500125}
126
127constexpr vtable_t end()
128{
Lei YU58d2c912020-02-18 12:41:24 +0800129 return vtable_t SD_BUS_VTABLE_END;
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500130}
131
132constexpr vtable_t method(const char* member, const char* signature,
133 const char* result, sd_bus_message_handler_t handler,
134 decltype(vtable_t::flags) flags)
135{
Lei YU58d2c912020-02-18 12:41:24 +0800136 return vtable_t SD_BUS_METHOD(member, signature, result, handler, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500137}
138
Patrick Williamscb922df2016-10-17 14:55:20 -0500139constexpr vtable_t method_o(const char* member, const char* signature,
140 const char* result,
Andrew Geissler072da3e2018-01-18 07:21:42 -0800141 sd_bus_message_handler_t handler, size_t offset,
142 decltype(vtable_t::flags) flags)
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500143{
Lei YU58d2c912020-02-18 12:41:24 +0800144 return vtable_t SD_BUS_METHOD_WITH_OFFSET(member, signature, result,
145 handler, offset, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500146}
147
148constexpr vtable_t signal(const char* member, const char* signature,
149 decltype(vtable_t::flags) flags)
150{
Lei YU58d2c912020-02-18 12:41:24 +0800151 return vtable_t SD_BUS_SIGNAL(member, signature, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500152}
153
154constexpr vtable_t property(const char* member, const char* signature,
155 sd_bus_property_get_t get,
156 decltype(vtable_t::flags) flags)
157{
Lei YU58d2c912020-02-18 12:41:24 +0800158 return vtable_t SD_BUS_PROPERTY(member, signature, get, 0, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500159}
160
161constexpr vtable_t property(const char* member, const char* signature,
162 sd_bus_property_get_t get,
163 sd_bus_property_set_t set,
164 decltype(vtable_t::flags) flags)
165{
Lei YU58d2c912020-02-18 12:41:24 +0800166 return vtable_t SD_BUS_WRITABLE_PROPERTY(member, signature, get, set, 0,
167 flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500168}
169
170constexpr vtable_t property_o(const char* member, const char* signature,
Andrew Geissler072da3e2018-01-18 07:21:42 -0800171 size_t offset, decltype(vtable_t::flags) flags)
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500172{
Lei YU58d2c912020-02-18 12:41:24 +0800173 return vtable_t SD_BUS_PROPERTY(member, signature, nullptr, offset, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500174}
175
176constexpr vtable_t property_o(const char* member, const char* signature,
177 sd_bus_property_set_t set, size_t offset,
178 decltype(vtable_t::flags) flags)
179{
Lei YU58d2c912020-02-18 12:41:24 +0800180 return vtable_t SD_BUS_WRITABLE_PROPERTY(member, signature, nullptr, set,
181 offset, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500182}
183
184} // namespace vtable
185
186} // namespace sdbusplus