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     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     co_return;
54 }
55 
56 int main()
57 {
58     sdbusplus::async::context ctx;
59     ctx.spawn(startup(ctx));
60     ctx.spawn(
61         sdbusplus::async::execution::just() |
62         sdbusplus::async::execution::then([&ctx]() { ctx.request_stop(); }));
63     ctx.run();
64 
65     return 0;
66 }
67