#ifndef seafire__server__request_hxx_ #define seafire__server__request_hxx_ #include #include #include #include #include namespace seafire::server { /// Represents a server-side request. /// class request_t { public: protocol::request_t const& get_message() const; std::istream& content(); // fixme: replace with non-virtual function and virtual // get_request_allocator function. // virtual common::allocator_t& memory() = 0; common::extension_context_t& extensions(); protected: request_t(); request_t(request_t const&) = delete; request_t(request_t&&) = delete; ~request_t() noexcept; request_t& operator=(request_t const&) = delete; request_t& operator=(request_t&&) = delete; private: virtual protocol::request_t const& get_request() const = 0; virtual std::istream& get_request_content() = 0; virtual common::extension_context_t& get_request_extensions() = 0; }; template bool has(request_t const&); template bool has_quick(request_t const&); template auto get(request_t const&); template auto get(request_t const&, std::error_code&); } // namespace seafire::server #include #endif