#include "common/Http.h" #include #include namespace visione::http { drogon::HttpResponsePtr json(Json::Value body, drogon::HttpStatusCode status) { auto response = drogon::HttpResponse::newHttpJsonResponse(std::move(body)); response->setStatusCode(status); return response; } drogon::HttpResponsePtr error(const std::string &code, drogon::HttpStatusCode status, const std::string &message) { Json::Value body; body["error"] = code; if (!message.empty()) { body["message"] = message; } return json(std::move(body), status); } drogon::HttpResponsePtr redirect(const std::string &url, drogon::HttpStatusCode status) { auto response = drogon::HttpResponse::newRedirectionResponse(url); response->setStatusCode(status); return response; } Json::Value requireJson(const drogon::HttpRequestPtr &request) { const auto &body = request->getJsonObject(); if (!body) { return Json::Value(Json::nullValue); } return *body; } Json::Value parseJsonBody(const std::string &body) { if (body.empty()) { return Json::Value(Json::nullValue); } Json::CharReaderBuilder builder; builder["collectComments"] = false; std::string errors; Json::Value parsed; std::istringstream stream(body); if (!Json::parseFromStream(builder, stream, &parsed, &errors)) { return Json::Value(Json::nullValue); } return parsed; } } // namespace visione::http