2023-12-30 22:42:11 +00:00
|
|
|
//SPDX-FileCopyrightText: 2023 Yury Gubich <blue@macaw.me>
|
|
|
|
//SPDX-License-Identifier: GPL-3.0-or-later
|
2023-12-10 23:23:15 +00:00
|
|
|
|
2023-11-21 22:19:08 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
#include <array>
|
|
|
|
#include <string_view>
|
|
|
|
|
2023-11-23 19:57:32 +00:00
|
|
|
#include <nlohmann/json.hpp>
|
|
|
|
|
2023-11-21 22:19:08 +00:00
|
|
|
#include "stream/ostream.h"
|
|
|
|
|
2023-12-22 23:25:20 +00:00
|
|
|
class Request;
|
2023-11-21 22:19:08 +00:00
|
|
|
class Response {
|
2023-12-22 23:25:20 +00:00
|
|
|
friend class Request;
|
|
|
|
|
2023-11-21 22:19:08 +00:00
|
|
|
public:
|
|
|
|
enum class Status {
|
|
|
|
ok,
|
2023-12-22 23:25:20 +00:00
|
|
|
badRequest,
|
|
|
|
unauthorized,
|
2024-01-21 19:23:48 +00:00
|
|
|
forbidden,
|
2023-11-21 22:19:08 +00:00
|
|
|
notFound,
|
|
|
|
methodNotAllowed,
|
2023-12-22 23:25:20 +00:00
|
|
|
conflict,
|
2023-11-21 22:19:08 +00:00
|
|
|
internalError,
|
|
|
|
__size
|
|
|
|
};
|
|
|
|
|
|
|
|
enum class ContentType {
|
|
|
|
text,
|
2023-11-23 19:57:32 +00:00
|
|
|
json,
|
2023-11-21 22:19:08 +00:00
|
|
|
__size
|
|
|
|
};
|
2023-12-22 23:25:20 +00:00
|
|
|
|
|
|
|
uint16_t statusCode() const;
|
2023-11-21 22:19:08 +00:00
|
|
|
|
2023-12-13 20:33:11 +00:00
|
|
|
void send() const;
|
2023-11-21 22:19:08 +00:00
|
|
|
void setBody(const std::string& body);
|
2023-11-23 19:57:32 +00:00
|
|
|
void setBody(const nlohmann::json& body);
|
2023-11-21 22:19:08 +00:00
|
|
|
|
2023-12-22 23:25:20 +00:00
|
|
|
private:
|
|
|
|
Response(Request& request);
|
|
|
|
Response(Request& request, Status status);
|
|
|
|
|
2023-11-21 22:19:08 +00:00
|
|
|
private:
|
2023-12-13 20:33:11 +00:00
|
|
|
Request& request;
|
2023-11-21 22:19:08 +00:00
|
|
|
Status status;
|
|
|
|
ContentType type;
|
|
|
|
std::string body;
|
|
|
|
};
|