xref: /openbmc/bmcweb/include/async_resp.hpp (revision 1214b7e7d921e331fb1480c7e5d579ffa5811cda)
1e3cb5a31SEd Tanous #pragma once
2e3cb5a31SEd Tanous 
3c0a1c8a0SIwona Klimaszewska #include <functional>
4c0a1c8a0SIwona Klimaszewska 
5e3cb5a31SEd Tanous namespace bmcweb
6e3cb5a31SEd Tanous {
7e3cb5a31SEd Tanous 
8e3cb5a31SEd Tanous /**
9e3cb5a31SEd Tanous  * AsyncResp
10e3cb5a31SEd Tanous  * Gathers data needed for response processing after async calls are done
11e3cb5a31SEd Tanous  */
12c0a1c8a0SIwona Klimaszewska 
13e3cb5a31SEd Tanous class AsyncResp
14e3cb5a31SEd Tanous {
15e3cb5a31SEd Tanous   public:
16e3cb5a31SEd Tanous     AsyncResp(crow::Response& response) : res(response)
17*1214b7e7SGunnar Mills     {}
18e3cb5a31SEd Tanous 
19c0a1c8a0SIwona Klimaszewska     AsyncResp(crow::Response& response, std::function<void()>&& function) :
20c0a1c8a0SIwona Klimaszewska         res(response), func(std::move(function))
21*1214b7e7SGunnar Mills     {}
22c0a1c8a0SIwona Klimaszewska 
23e3cb5a31SEd Tanous     ~AsyncResp()
24e3cb5a31SEd Tanous     {
25c0a1c8a0SIwona Klimaszewska         if (func && res.result() == boost::beast::http::status::ok)
26c0a1c8a0SIwona Klimaszewska         {
27c0a1c8a0SIwona Klimaszewska             func();
28c0a1c8a0SIwona Klimaszewska         }
29c0a1c8a0SIwona Klimaszewska 
30e3cb5a31SEd Tanous         res.end();
31e3cb5a31SEd Tanous     }
32e3cb5a31SEd Tanous 
33e3cb5a31SEd Tanous     crow::Response& res;
34c0a1c8a0SIwona Klimaszewska     std::function<void()> func = 0;
35e3cb5a31SEd Tanous };
36e3cb5a31SEd Tanous 
37e3cb5a31SEd Tanous } // namespace bmcweb
38