blob: c2d8ba6b7a7d5975cc3c93aac36d4dc85dac0d7f [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
101namespace method_
102{
Andrew Geissler072da3e2018-01-18 07:21:42 -0800103constexpr auto no_reply = SD_BUS_VTABLE_METHOD_NO_REPLY;
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500104} // namespace method_
105
106namespace property_
107{
Andrew Geissler072da3e2018-01-18 07:21:42 -0800108constexpr auto const_ = SD_BUS_VTABLE_PROPERTY_CONST;
109constexpr auto emits_change = SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE;
110constexpr auto emits_invalidation = SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION;
111constexpr auto explicit_ = SD_BUS_VTABLE_PROPERTY_EXPLICIT;
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500112} // namespace property_
113
114constexpr vtable_t start(decltype(vtable_t::flags) flags)
115{
Lei YU58d2c912020-02-18 12:41:24 +0800116 return vtable_t SD_BUS_VTABLE_START(flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500117}
118
119constexpr vtable_t end()
120{
Lei YU58d2c912020-02-18 12:41:24 +0800121 return vtable_t SD_BUS_VTABLE_END;
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500122}
123
124constexpr vtable_t method(const char* member, const char* signature,
125 const char* result, sd_bus_message_handler_t handler,
126 decltype(vtable_t::flags) flags)
127{
Lei YU58d2c912020-02-18 12:41:24 +0800128 return vtable_t SD_BUS_METHOD(member, signature, result, handler, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500129}
130
Patrick Williamscb922df2016-10-17 14:55:20 -0500131constexpr vtable_t method_o(const char* member, const char* signature,
132 const char* result,
Andrew Geissler072da3e2018-01-18 07:21:42 -0800133 sd_bus_message_handler_t handler, size_t offset,
134 decltype(vtable_t::flags) flags)
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500135{
Lei YU58d2c912020-02-18 12:41:24 +0800136 return vtable_t SD_BUS_METHOD_WITH_OFFSET(member, signature, result,
137 handler, offset, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500138}
139
140constexpr vtable_t signal(const char* member, const char* signature,
141 decltype(vtable_t::flags) flags)
142{
Lei YU58d2c912020-02-18 12:41:24 +0800143 return vtable_t SD_BUS_SIGNAL(member, signature, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500144}
145
146constexpr vtable_t property(const char* member, const char* signature,
147 sd_bus_property_get_t get,
148 decltype(vtable_t::flags) flags)
149{
Lei YU58d2c912020-02-18 12:41:24 +0800150 return vtable_t SD_BUS_PROPERTY(member, signature, get, 0, 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 sd_bus_property_set_t set,
156 decltype(vtable_t::flags) flags)
157{
Lei YU58d2c912020-02-18 12:41:24 +0800158 return vtable_t SD_BUS_WRITABLE_PROPERTY(member, signature, get, set, 0,
159 flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500160}
161
162constexpr vtable_t property_o(const char* member, const char* signature,
Andrew Geissler072da3e2018-01-18 07:21:42 -0800163 size_t offset, decltype(vtable_t::flags) flags)
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500164{
Lei YU58d2c912020-02-18 12:41:24 +0800165 return vtable_t SD_BUS_PROPERTY(member, signature, nullptr, offset, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500166}
167
168constexpr vtable_t property_o(const char* member, const char* signature,
169 sd_bus_property_set_t set, size_t offset,
170 decltype(vtable_t::flags) flags)
171{
Lei YU58d2c912020-02-18 12:41:24 +0800172 return vtable_t SD_BUS_WRITABLE_PROPERTY(member, signature, nullptr, set,
173 offset, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500174}
175
176} // namespace vtable
177
178} // namespace sdbusplus