// // Created by selim on 03.01.2022. // #include "Api.h" #include template struct callback { void(*function)(Args..., void*) = nullptr; std::unique_ptr state; }; template callback voidify(Lambda&& l) { using Func = typename std::decay::type; std::unique_ptr data( new Func(std::forward(l)), +[](void* ptr){ std::cout << "!!!!!!!!!!!!!!!!! Deleting data" << std::endl; delete (Func*)ptr; } ); return { +[](Args... args, void* v)->void { Func* f = static_cast< Func* >(v); (*f)(std::forward(args)...); }, std::move(data) }; } const std::string Api::_baseUrl = "https://vps.aliencat.pro:8443/"; SoupSession* Api::_session = soup_session_new(); Task Api::login(std::string email, std::string password) { std::string url = _baseUrl + "user/login"; auto msg = soup_message_new(SOUP_METHOD_POST, url.c_str()); auto task = Task(); auto callback = voidify([&](SoupSession* session, SoupMessage* message) { std::cout << "Callback called" << std::endl; task.set_result(User("qwe", "asdf")); }); soup_session_queue_message(_session, msg, callback.function, callback.state.get()); return task; }