sdbus-c++
2.3.1
High-level C++ D-Bus library based on systemd D-Bus implementation
Toggle main menu visibility
Loading...
Searching...
No Matches
ConvenienceApiClasses.h
Go to the documentation of this file.
1
26
27
#ifndef SDBUS_CXX_CONVENIENCEAPICLASSES_H_
28
#define SDBUS_CXX_CONVENIENCEAPICLASSES_H_
29
30
#include <
sdbus-c++/Awaitable.h
>
31
#include <
sdbus-c++/Message.h
>
32
#include <
sdbus-c++/TypeTraits.h
>
33
#include <
sdbus-c++/Types.h
>
34
#include <
sdbus-c++/VTableItems.h
>
35
36
#include <chrono>
37
#include <cstdint>
38
#include <future>
39
#include <map>
40
#include <string>
41
#include <string_view>
42
#include <vector>
43
44
// Forward declarations
45
namespace
sdbus {
46
class
IObject
;
47
class
IProxy
;
48
class
Error
;
49
class
PendingAsyncCall
;
50
}
// namespace sdbus
51
52
namespace
sdbus {
53
54
class
VTableAdder
55
{
56
public
:
57
void
forInterface(
InterfaceName
interfaceName);
58
void
forInterface(std::string interfaceName);
59
[[nodiscard]] Slot forInterface(
InterfaceName
interfaceName,
return_slot_t
);
60
[[nodiscard]] Slot forInterface(std::string interfaceName,
return_slot_t
);
61
62
private
:
63
friend
IObject;
64
VTableAdder(IObject&
object
, std::vector<VTableItem> vtable);
65
66
IObject& object_;
// NOLINT(cppcoreguidelines-avoid-const-or-ref-data-members)
67
std::vector<VTableItem> vtable_;
68
};
69
70
class
SignalEmitter
71
{
72
public
:
73
SignalEmitter& onInterface(
const
InterfaceName
& interfaceName);
74
SignalEmitter& onInterface(
const
std::string& interfaceName);
75
SignalEmitter& onInterface(
const
char
* interfaceName);
76
template
<
typename
... Args>
void
withArguments(Args&&... args);
77
78
SignalEmitter(
const
SignalEmitter&) =
delete
;
79
SignalEmitter& operator=(
const
SignalEmitter&) =
delete
;
80
SignalEmitter(SignalEmitter&& other) =
default
;
81
SignalEmitter& operator=(SignalEmitter&&) =
delete
;
82
~SignalEmitter()
noexcept
(
false
);
83
84
private
:
85
friend
IObject;
86
SignalEmitter(IObject&
object
,
const
SignalName& signalName);
87
SignalEmitter(IObject&
object
,
const
char
* signalName);
88
89
IObject& object_;
// NOLINT(cppcoreguidelines-avoid-const-or-ref-data-members)
90
const
char
* signalName_;
91
Signal
signal_;
92
int
exceptions_{};
// Number of active exceptions when SignalEmitter is constructed
93
};
94
95
class
MethodInvoker
96
{
97
public
:
98
MethodInvoker& onInterface(
const
InterfaceName
& interfaceName);
99
MethodInvoker& onInterface(
const
std::string& interfaceName);
100
MethodInvoker& onInterface(
const
char
* interfaceName);
101
MethodInvoker& withTimeout(uint64_t usec);
102
template
<
typename
Rep,
typename
Period>
103
MethodInvoker& withTimeout(
const
std::chrono::duration<Rep, Period>& timeout);
104
template
<
typename
... Args> MethodInvoker& withArguments(Args&&... args);
105
template
<
typename
... Args>
void
storeResultsTo(Args&... args);
106
void
dontExpectReply();
107
108
MethodInvoker(
const
MethodInvoker&) =
delete
;
109
MethodInvoker& operator=(
const
MethodInvoker&) =
delete
;
110
MethodInvoker(MethodInvoker&& other) =
default
;
111
MethodInvoker& operator=(MethodInvoker&&) =
delete
;
112
~MethodInvoker()
noexcept
(
false
);
113
114
private
:
115
friend
IProxy;
116
MethodInvoker(IProxy& proxy,
const
MethodName& methodName);
117
MethodInvoker(IProxy& proxy,
const
char
* methodName);
118
119
IProxy& proxy_;
// NOLINT(cppcoreguidelines-avoid-const-or-ref-data-members)
120
const
char
* methodName_;
121
uint64_t timeout_{};
122
MethodCall
method_;
123
int
exceptions_{};
// Number of active exceptions when MethodInvoker is constructed
124
bool
methodCalled_{};
125
};
126
127
class
AsyncMethodInvoker
128
{
129
public
:
130
AsyncMethodInvoker& onInterface(
const
InterfaceName
& interfaceName);
131
AsyncMethodInvoker& onInterface(
const
std::string& interfaceName);
132
AsyncMethodInvoker& onInterface(
const
char
* interfaceName);
133
AsyncMethodInvoker& withTimeout(uint64_t usec);
134
template
<
typename
Rep,
typename
Period>
135
AsyncMethodInvoker& withTimeout(
const
std::chrono::duration<Rep, Period>& timeout);
136
template
<
typename
... Args> AsyncMethodInvoker& withArguments(Args&&... args);
137
template
<
typename
Function>
PendingAsyncCall
uponReplyInvoke(Function&& callback);
138
template
<
typename
Function> [[nodiscard]] Slot uponReplyInvoke(Function&& callback,
return_slot_t
);
139
// Returned future will be std::future<void> for no (void) D-Bus method return value
140
// or std::future<T> for single D-Bus method return value
141
// or std::future<std::tuple<...>> for multiple method return values
142
template
<
typename
... Args> std::future<future_return_t<Args...>> getResultAsFuture();
143
template
<
typename
... Args>
Awaitable
<awaitable_return_t<Args...>> getResultAsAwaitable();
144
145
private
:
146
friend
IProxy;
147
AsyncMethodInvoker(IProxy& proxy,
const
MethodName& methodName);
148
AsyncMethodInvoker(IProxy& proxy,
const
char
* methodName);
149
template
<
typename
Function> async_reply_handler makeAsyncReplyHandler(Function&& callback);
150
151
IProxy& proxy_;
// NOLINT(cppcoreguidelines-avoid-const-or-ref-data-members)
152
const
char
* methodName_;
153
uint64_t timeout_{};
154
MethodCall
method_;
155
};
156
157
class
SignalSubscriber
158
{
159
public
:
160
SignalSubscriber& onInterface(
const
InterfaceName
& interfaceName);
161
SignalSubscriber& onInterface(
const
std::string& interfaceName);
162
SignalSubscriber& onInterface(
const
char
* interfaceName);
163
template
<
typename
Function>
void
call(Function&& callback);
164
template
<
typename
Function> [[nodiscard]] Slot call(Function&& callback,
return_slot_t
);
165
166
private
:
167
friend
IProxy;
168
SignalSubscriber(IProxy& proxy,
const
SignalName& signalName);
169
SignalSubscriber(IProxy& proxy,
const
char
* signalName);
170
template
<
typename
Function> signal_handler makeSignalHandler(Function&& callback);
171
172
IProxy& proxy_;
// NOLINT(cppcoreguidelines-avoid-const-or-ref-data-members)
173
const
char
* signalName_;
174
const
char
* interfaceName_{};
175
};
176
177
class
PropertyGetter
178
{
179
public
:
180
Variant
onInterface(std::string_view interfaceName);
181
182
private
:
183
friend
IProxy;
184
PropertyGetter(IProxy& proxy, std::string_view propertyName);
185
186
static
constexpr
const
char
* DBUS_PROPERTIES_INTERFACE_NAME =
"org.freedesktop.DBus.Properties"
;
187
188
IProxy& proxy_;
// NOLINT(cppcoreguidelines-avoid-const-or-ref-data-members)
189
std::string_view propertyName_;
190
};
191
192
class
AsyncPropertyGetter
193
{
194
public
:
195
AsyncPropertyGetter& onInterface(std::string_view interfaceName);
196
template
<
typename
Function>
PendingAsyncCall
uponReplyInvoke(Function&& callback);
197
template
<
typename
Function> [[nodiscard]] Slot uponReplyInvoke(Function&& callback,
return_slot_t
);
198
std::future<Variant> getResultAsFuture();
199
Awaitable<Variant>
getResultAsAwaitable();
200
201
private
:
202
friend
IProxy;
203
AsyncPropertyGetter(IProxy& proxy, std::string_view propertyName);
204
205
static
constexpr
const
char
* DBUS_PROPERTIES_INTERFACE_NAME =
"org.freedesktop.DBus.Properties"
;
206
207
IProxy& proxy_;
// NOLINT(cppcoreguidelines-avoid-const-or-ref-data-members)
208
std::string_view propertyName_;
209
std::string_view interfaceName_;
210
};
211
212
class
PropertySetter
213
{
214
public
:
215
PropertySetter& onInterface(std::string_view interfaceName);
216
template
<
typename
Value>
void
toValue(
const
Value& value);
217
template
<
typename
Value>
void
toValue(
const
Value& value,
dont_expect_reply_t
);
218
void
toValue(
const
Variant
& value);
219
void
toValue(
const
Variant
& value,
dont_expect_reply_t
);
220
221
private
:
222
friend
IProxy;
223
PropertySetter(IProxy& proxy, std::string_view propertyName);
224
225
static
constexpr
const
char
* DBUS_PROPERTIES_INTERFACE_NAME =
"org.freedesktop.DBus.Properties"
;
226
227
IProxy& proxy_;
// NOLINT(cppcoreguidelines-avoid-const-or-ref-data-members)
228
std::string_view propertyName_;
229
std::string_view interfaceName_;
230
};
231
232
class
AsyncPropertySetter
233
{
234
public
:
235
AsyncPropertySetter& onInterface(std::string_view interfaceName);
236
template
<
typename
Value> AsyncPropertySetter& toValue(Value&& value);
237
AsyncPropertySetter& toValue(
Variant
value);
238
template
<
typename
Function>
PendingAsyncCall
uponReplyInvoke(Function&& callback);
239
template
<
typename
Function> [[nodiscard]] Slot uponReplyInvoke(Function&& callback,
return_slot_t
);
240
std::future<void> getResultAsFuture();
241
Awaitable<void>
getResultAsAwaitable();
242
243
private
:
244
friend
IProxy;
245
AsyncPropertySetter(IProxy& proxy, std::string_view propertyName);
246
247
static
constexpr
const
char
* DBUS_PROPERTIES_INTERFACE_NAME =
"org.freedesktop.DBus.Properties"
;
248
249
IProxy& proxy_;
// NOLINT(cppcoreguidelines-avoid-const-or-ref-data-members)
250
std::string_view propertyName_;
251
std::string_view interfaceName_;
252
Variant
value_;
253
};
254
255
class
AllPropertiesGetter
256
{
257
public
:
258
std::map<PropertyName, Variant> onInterface(std::string_view interfaceName);
259
260
private
:
261
friend
IProxy;
262
explicit
AllPropertiesGetter(IProxy& proxy);
263
264
static
constexpr
const
char
* DBUS_PROPERTIES_INTERFACE_NAME =
"org.freedesktop.DBus.Properties"
;
265
266
IProxy& proxy_;
// NOLINT(cppcoreguidelines-avoid-const-or-ref-data-members)
267
};
268
269
class
AsyncAllPropertiesGetter
270
{
271
public
:
272
AsyncAllPropertiesGetter& onInterface(std::string_view interfaceName);
273
template
<
typename
Function>
PendingAsyncCall
uponReplyInvoke(Function&& callback);
274
template
<
typename
Function> [[nodiscard]] Slot uponReplyInvoke(Function&& callback,
return_slot_t
);
275
std::future<std::map<PropertyName, Variant>> getResultAsFuture();
276
Awaitable<std::map<PropertyName, Variant>
> getResultAsAwaitable();
277
278
private
:
279
friend
IProxy;
280
explicit
AsyncAllPropertiesGetter(IProxy& proxy);
281
282
static
constexpr
const
char
* DBUS_PROPERTIES_INTERFACE_NAME =
"org.freedesktop.DBus.Properties"
;
283
284
IProxy& proxy_;
// NOLINT(cppcoreguidelines-avoid-const-or-ref-data-members)
285
std::string_view interfaceName_;
286
};
287
288
}
// namespace sdbus
289
290
#endif
/* SDBUS_CXX_CONVENIENCEAPICLASSES_H_ */
Awaitable.h
Message.h
TypeTraits.h
Types.h
VTableItems.h
sdbus::Awaitable
Definition
Awaitable.h:110
sdbus::Error
Definition
Error.h:44
sdbus::IObject
Definition
IObject.h:63
sdbus::IProxy
Definition
IProxy.h:70
sdbus::InterfaceName
Definition
Types.h:251
sdbus::MethodCall
Definition
Message.h:278
sdbus::PendingAsyncCall
Definition
IProxy.h:722
sdbus::Signal
Definition
Message.h:314
sdbus::Variant
Definition
Types.h:56
sdbus::dont_expect_reply_t
Definition
TypeTraits.h:107
sdbus::return_slot_t
Definition
TypeTraits.h:88
include
sdbus-c++
ConvenienceApiClasses.h
Generated by
1.17.0