#pragma once #include #include #include #include class Response { public: enum Type { image, root, error }; virtual ~Response(); virtual void writeHeader(std::ostream& out) const = 0; virtual void writeBody(std::ostream& out) const = 0; static Response* create(const std::string_view& path); protected: Response(Type type); static std::vector splitPath(std::string_view path); public: const Type type; static const char* status200Header; static const char* status404Header; static const char* status405Header; static const char* status500Header; static const char* pathDelimiter; static const char* newLine; static const char* headerTerminator; static const char* contentTypeHTML; static const char* contentTypeSVG; };