#pragma once #include "network_connection.hpp" #include enum HTTPRequestMethod { GET, POST, PUT, HEAD, DELETE, CONNECT, OPTIONS, TRACE, PATCH }; constexpr const char *http_request_method_strs[] = { "GET", "POST", "PUT", "HEAD", "DELETE", "CONNECT", "OPTIONS", "TRACE", "PATCH" }; auto str_to_http_request_method(const char *http_request_method_str) -> HTTPRequestMethod; class HTTPRequest { public: explicit HTTPRequest( NetworkConnection connection, HTTPRequestMethod method, char *http_version, char *path, int data_length, char *data ) noexcept; HTTPRequest(const HTTPRequest &other) noexcept = delete; HTTPRequest(HTTPRequest &&other) noexcept; ~HTTPRequest() noexcept; auto connection() noexcept -> NetworkConnection &; auto method() const noexcept -> HTTPRequestMethod; auto http_version() const noexcept -> const char *; auto path() const noexcept -> const char *; auto data_length() const noexcept -> int; auto data() const noexcept -> const char *; auto operator=(const HTTPRequest &other) noexcept -> HTTPRequest & = delete; auto operator=(HTTPRequest &&other) noexcept -> HTTPRequest &; static auto create_invalid() noexcept -> HTTPRequest; private: NetworkConnection _connection; const HTTPRequestMethod _method; char *_http_version; char *_path; const int _data_length; char *_data; HTTPRequest() noexcept; };