1
0
forked from blue/pica
pica/response/response.cpp

58 lines
1.4 KiB
C++

// SPDX-FileCopyrightText: 2023 Yury Gubich <blue@macaw.me>
// SPDX-License-Identifier: GPL-3.0-or-later
#include "response.h"
constexpr std::array<std::string_view, static_cast<uint8_t>(Response::Status::__size)> statusCodes = {
"Status: 200 OK",
"Status: 404 Not Found",
"Status: 405 Method Not Allowed",
"Status: 500 Internal Error"
};
constexpr std::array<std::string_view, static_cast<uint8_t>(Response::ContentType::__size)> contentTypes = {
"Content-type: text/plain",
"Content-type: application/json"
};
Response::Response(Request& request):
request(request),
status(Status::ok),
type(ContentType::text),
body()
{}
Response::Response(Request& request, Status status):
request(request),
status(status),
type(ContentType::text),
body()
{}
void Response::send() const {
// OStream out = status == Status::ok ?
// request.getOutputStream() :
// request.getErrorStream();
OStream out = request.getOutputStream(this);
out << statusCodes[static_cast<uint8_t>(status)];
if (!body.empty())
out << '\n'
<< contentTypes[static_cast<uint8_t>(type)]
<< '\n'
<< '\n'
<< body;
request.responseIsComplete(this);
}
void Response::setBody(const std::string& body) {
type = ContentType::text;
Response::body = body;
}
void Response::setBody(const nlohmann::json& body) {
type = ContentType::json;
Response::body = body.dump();
}