xref: /openbmc/bmcweb/include/async_resp.hpp (revision c0a1c8a0ecc55aef54e6f44ea89a4dd232e265a2)
1e3cb5a31SEd Tanous #pragma once
2e3cb5a31SEd Tanous 
3*c0a1c8a0SIwona Klimaszewska #include <functional>
4*c0a1c8a0SIwona 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  */
12*c0a1c8a0SIwona Klimaszewska 
13e3cb5a31SEd Tanous class AsyncResp
14e3cb5a31SEd Tanous {
15e3cb5a31SEd Tanous   public:
16e3cb5a31SEd Tanous     AsyncResp(crow::Response& response) : res(response)
17e3cb5a31SEd Tanous     {
18e3cb5a31SEd Tanous     }
19e3cb5a31SEd Tanous 
20*c0a1c8a0SIwona Klimaszewska     AsyncResp(crow::Response& response, std::function<void()>&& function) :
21*c0a1c8a0SIwona Klimaszewska         res(response), func(std::move(function))
22*c0a1c8a0SIwona Klimaszewska     {
23*c0a1c8a0SIwona Klimaszewska     }
24*c0a1c8a0SIwona Klimaszewska 
25e3cb5a31SEd Tanous     ~AsyncResp()
26e3cb5a31SEd Tanous     {
27*c0a1c8a0SIwona Klimaszewska         if (func && res.result() == boost::beast::http::status::ok)
28*c0a1c8a0SIwona Klimaszewska         {
29*c0a1c8a0SIwona Klimaszewska             func();
30*c0a1c8a0SIwona Klimaszewska         }
31*c0a1c8a0SIwona Klimaszewska 
32e3cb5a31SEd Tanous         res.end();
33e3cb5a31SEd Tanous     }
34e3cb5a31SEd Tanous 
35e3cb5a31SEd Tanous     crow::Response& res;
36*c0a1c8a0SIwona Klimaszewska     std::function<void()> func = 0;
37e3cb5a31SEd Tanous };
38e3cb5a31SEd Tanous 
39e3cb5a31SEd Tanous } // namespace bmcweb
40