blob: 851aa8ca1a6d90477c626cf99f0b3fcd26d17e80 [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 */
Patrick Williams06f265f2024-08-16 15:19:49 -040073constexpr vtable_t property(
74 const char* member, const char* signature, sd_bus_property_get_t get,
75 sd_bus_property_set_t set, decltype(vtable_t::flags) flags = 0);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -050076
77/** Create a SD_BUS_PROPERTY entry.
78 *
79 * @param[in] member - Name of signal.
80 * @param[in] signature - Signature of signal.
Ed Tanousda48d202023-03-08 09:49:55 -080081 * @param[in] get - Functor to call on property get.
Patrick Williams9d3ec7f2016-09-27 20:30:58 -050082 * @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,
Ed Tanousda48d202023-03-08 09:49:55 -080086 sd_bus_property_get_t get, size_t offset,
Patrick Williams9d3ec7f2016-09-27 20:30:58 -050087 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.
Ed Tanousda48d202023-03-08 09:49:55 -080093 * @param[in] get - Functor to call on property get.
Patrick Williams9d3ec7f2016-09-27 20:30:58 -050094 * @param[in] set - Functor to call on property set.
95 * @param[in] offset - Offset within object for property.
96 * @param[in] flags - optional sdbusplus::vtable::property_ value.
97 */
Patrick Williams62691572025-02-01 08:21:40 -050098constexpr vtable_t property_o(const char* member, const char* signature,
99 sd_bus_property_get_t get,
100 sd_bus_property_set_t set, size_t offset,
101 decltype(vtable_t::flags) flags = 0);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500102
Waqar Hameed3e3a6652020-06-04 10:51:18 +0200103namespace common_
104{
105constexpr auto deprecated = SD_BUS_VTABLE_DEPRECATED;
106constexpr auto hidden = SD_BUS_VTABLE_HIDDEN;
107constexpr auto unprivileged = SD_BUS_VTABLE_UNPRIVILEGED;
108} // namespace common_
109
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500110namespace method_
111{
Andrew Geissler072da3e2018-01-18 07:21:42 -0800112constexpr auto no_reply = SD_BUS_VTABLE_METHOD_NO_REPLY;
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500113} // namespace method_
114
115namespace property_
116{
Andrew Geissler072da3e2018-01-18 07:21:42 -0800117constexpr auto const_ = SD_BUS_VTABLE_PROPERTY_CONST;
118constexpr auto emits_change = SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE;
119constexpr auto emits_invalidation = SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION;
120constexpr auto explicit_ = SD_BUS_VTABLE_PROPERTY_EXPLICIT;
Krzysztof Grobelny2be0e172020-07-27 11:12:07 +0200121constexpr auto none = decltype(vtable_t::flags){};
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500122} // namespace property_
123
124constexpr vtable_t start(decltype(vtable_t::flags) flags)
125{
Lei YU58d2c912020-02-18 12:41:24 +0800126 return vtable_t SD_BUS_VTABLE_START(flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500127}
128
129constexpr vtable_t end()
130{
Lei YU58d2c912020-02-18 12:41:24 +0800131 return vtable_t SD_BUS_VTABLE_END;
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500132}
133
134constexpr vtable_t method(const char* member, const char* signature,
135 const char* result, sd_bus_message_handler_t handler,
136 decltype(vtable_t::flags) flags)
137{
Lei YU58d2c912020-02-18 12:41:24 +0800138 return vtable_t SD_BUS_METHOD(member, signature, result, handler, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500139}
140
Patrick Williamscb922df2016-10-17 14:55:20 -0500141constexpr vtable_t method_o(const char* member, const char* signature,
142 const char* result,
Andrew Geissler072da3e2018-01-18 07:21:42 -0800143 sd_bus_message_handler_t handler, size_t offset,
144 decltype(vtable_t::flags) flags)
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500145{
Lei YU58d2c912020-02-18 12:41:24 +0800146 return vtable_t SD_BUS_METHOD_WITH_OFFSET(member, signature, result,
147 handler, offset, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500148}
149
150constexpr vtable_t signal(const char* member, const char* signature,
151 decltype(vtable_t::flags) flags)
152{
Lei YU58d2c912020-02-18 12:41:24 +0800153 return vtable_t SD_BUS_SIGNAL(member, signature, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500154}
155
156constexpr vtable_t property(const char* member, const char* signature,
157 sd_bus_property_get_t get,
158 decltype(vtable_t::flags) flags)
159{
Lei YU58d2c912020-02-18 12:41:24 +0800160 return vtable_t SD_BUS_PROPERTY(member, signature, get, 0, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500161}
162
Patrick Williams06f265f2024-08-16 15:19:49 -0400163constexpr vtable_t property(
164 const char* member, const char* signature, sd_bus_property_get_t get,
165 sd_bus_property_set_t set, decltype(vtable_t::flags) flags)
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500166{
Lei YU58d2c912020-02-18 12:41:24 +0800167 return vtable_t SD_BUS_WRITABLE_PROPERTY(member, signature, get, set, 0,
168 flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500169}
170
171constexpr vtable_t property_o(const char* member, const char* signature,
Ed Tanousda48d202023-03-08 09:49:55 -0800172 sd_bus_property_get_t get, size_t offset,
173 decltype(vtable_t::flags) flags)
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500174{
Ed Tanousda48d202023-03-08 09:49:55 -0800175 return vtable_t SD_BUS_PROPERTY(member, signature, get, offset, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500176}
177
Patrick Williams06f265f2024-08-16 15:19:49 -0400178constexpr vtable_t property_o(
179 const char* member, const char* signature, sd_bus_property_get_t get,
180 sd_bus_property_set_t set, size_t offset, decltype(vtable_t::flags) flags)
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500181{
Ed Tanousda48d202023-03-08 09:49:55 -0800182 return vtable_t SD_BUS_WRITABLE_PROPERTY(member, signature, get, set,
Lei YU58d2c912020-02-18 12:41:24 +0800183 offset, flags);
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500184}
185
186} // namespace vtable
187
Patrick Williamsa735ca52021-11-19 11:36:18 -0600188using vtable_t = vtable::vtable_t;
189
Patrick Williams9d3ec7f2016-09-27 20:30:58 -0500190} // namespace sdbusplus