xref: /openbmc/bmcweb/include/async_resp.hpp (revision dab0604af234bdd5010407031a01343d6c242edf)
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)
171214b7e7SGunnar Mills     {}
18e3cb5a31SEd Tanous 
19c0a1c8a0SIwona Klimaszewska     AsyncResp(crow::Response& response, std::function<void()>&& function) :
20c0a1c8a0SIwona Klimaszewska         res(response), func(std::move(function))
211214b7e7SGunnar Mills     {}
22c0a1c8a0SIwona Klimaszewska 
23*dab0604aSKrzysztof Grobelny     AsyncResp(const AsyncResp&) = delete;
24*dab0604aSKrzysztof Grobelny     AsyncResp(AsyncResp&&) = delete;
25*dab0604aSKrzysztof Grobelny 
26e3cb5a31SEd Tanous     ~AsyncResp()
27e3cb5a31SEd Tanous     {
28c0a1c8a0SIwona Klimaszewska         if (func && res.result() == boost::beast::http::status::ok)
29c0a1c8a0SIwona Klimaszewska         {
30c0a1c8a0SIwona Klimaszewska             func();
31c0a1c8a0SIwona Klimaszewska         }
32c0a1c8a0SIwona Klimaszewska 
33e3cb5a31SEd Tanous         res.end();
34e3cb5a31SEd Tanous     }
35e3cb5a31SEd Tanous 
36e3cb5a31SEd Tanous     crow::Response& res;
3723a21a1cSEd Tanous     std::function<void()> func;
38e3cb5a31SEd Tanous };
39e3cb5a31SEd Tanous 
40e3cb5a31SEd Tanous } // namespace bmcweb
41