1 #include <net/poettering/Calculator/client.hpp>
2 #include <sdbusplus/async.hpp>
3 
4 #include <iostream>
5 
6 auto startup(sdbusplus::async::context& ctx) -> sdbusplus::async::task<>
7 {
8     constexpr auto service = "net.poettering.Calculator";
9     constexpr auto path = "/net/poettering/calculator";
10 
11     auto c = sdbusplus::client::net::poettering::Calculator(ctx)
12                  .service(service)
13                  .path(path);
14 
15     // Alternatively, sdbusplus::async::client_t<Calculator, ...>() could have
16     // been used to combine multiple interfaces into a single client-proxy.
17 
18     {
19         auto _ = co_await c.multiply(7, 6);
20         std::cout << "Should be 42: " << _ << std::endl;
21     }
22 
23     {
24         auto _ = co_await c.lastResult();
25         std::cout << "Should be 42: " << _ << std::endl;
26     }
27 
28     {
29         co_await c.clear();
30     }
31 
32     {
33         auto _ = co_await c.lastResult();
34         std::cout << "Should be 0: " << _ << std::endl;
35     }
36 
37     {
38         co_await c.lastResult(1234);
39         auto _ = co_await c.lastResult();
40         std::cout << "Should be 1234: " << _ << std::endl;
41     }
42 
43     co_return;
44 }
45 
46 int main()
47 {
48     sdbusplus::async::context ctx;
49     ctx.spawn(startup(ctx));
50     ctx.spawn(
51         sdbusplus::async::execution::just() |
52         sdbusplus::async::execution::then([&ctx]() { ctx.request_stop(); }));
53     ctx.run();
54 
55     return 0;
56 }
57