1 #include <net/poettering/Calculator/client.hpp>
2 #include <sdbusplus/async.hpp>
3 
4 #include <iostream>
5 
startup(sdbusplus::async::context & ctx)6 auto startup(sdbusplus::async::context& ctx) -> sdbusplus::async::task<>
7 {
8     using Calculator = sdbusplus::client::net::poettering::Calculator<>;
9 
10     auto c = Calculator(ctx)
11                  .service(Calculator::default_service)
12                  .path(Calculator::instance_path);
13 
14     // Alternatively, sdbusplus::async::client_t<Calculator, ...>() could have
15     // been used to combine multiple interfaces into a single client-proxy.
16     auto alternative_c [[maybe_unused]] =
17         sdbusplus::async::client_t<
18             sdbusplus::client::net::poettering::Calculator>(ctx)
19             .service(Calculator::default_service)
20             .path(Calculator::instance_path);
21 
22     {
23         // Call the Multiply method.
24         auto _ = co_await c.multiply(7, 6);
25         std::cout << "Should be 42: " << _ << std::endl;
26     }
27 
28     {
29         // Get the LastResult property.
30         auto _ = co_await c.last_result();
31         std::cout << "Should be 42: " << _ << std::endl;
32     }
33 
34     {
35         // Call the Clear method.
36         co_await c.clear();
37     }
38 
39     {
40         // Get the LastResult property.
41         auto _ = co_await c.last_result();
42         std::cout << "Should be 0: " << _ << std::endl;
43     }
44 
45     {
46         // Set the LastResult property.
47         co_await c.last_result(1234);
48         // Get the LastResult property.
49         auto _ = co_await c.last_result();
50         std::cout << "Should be 1234: " << _ << std::endl;
51     }
52 
53     {
54         co_await c.owner("client");
55     }
56 
57     {
58         auto _ = co_await c.owner();
59         std::cout << "Should be 'client': " << _ << std::endl;
60     }
61 
62     co_return;
63 }
64 
main()65 int main()
66 {
67     sdbusplus::async::context ctx;
68     ctx.spawn(startup(ctx));
69     ctx.spawn(
70         sdbusplus::async::execution::just() |
71         sdbusplus::async::execution::then([&ctx]() { ctx.request_stop(); }));
72     ctx.run();
73 
74     return 0;
75 }
76