diff --git a/CRUD/service/mime_types.hpp b/CRUD/service/mime_types.hpp index 09865d3..bc887e2 100644 --- a/CRUD/service/mime_types.hpp +++ b/CRUD/service/mime_types.hpp @@ -32,7 +32,8 @@ struct mapping { "jpg", "image/jpeg" }, { "png", "image/png" }, { "json", "application/json"}, - { "css", "text/css"} + { "css", "text/css"}, + { "txt", "text/plain"} }; @@ -64,6 +65,7 @@ constexpr const char* JPG = mime_types::extension_to_type("jpg"); constexpr const char* PNG = mime_types::extension_to_type("png"); constexpr const char* JSON = mime_types::extension_to_type("json"); constexpr const char* CSS = mime_types::extension_to_type("css"); +constexpr const char* TXT = mime_types::extension_to_type("txt"); /// Convert a file extension into a MIME type. std::string extension_to_type(const std::string& extension); diff --git a/CRUD/service/reply.cpp b/CRUD/service/reply.cpp index 9f08589..64a56a2 100644 --- a/CRUD/service/reply.cpp +++ b/CRUD/service/reply.cpp @@ -247,11 +247,22 @@ reply reply::stock_reply(reply::status_type status, const char* mime) rep.status = status; if ( status != reply::no_content) { rep.content = stock_replies::to_string(status); - rep.headers.resize(2); - rep.headers[0].name = "Content-Length"; - rep.headers[0].value = std::to_string(rep.content.size()); - rep.headers[1].name = "Content-Type"; - rep.headers[1].value = mime; + rep.headers.reserve(2); + rep.headers.emplace_back("Content-Length", std::to_string(rep.content.size())); + rep.headers.emplace_back("Content-Type", mime); + } + return rep; +} + +reply reply::custom_reply(reply::status_type status, const char* mime, std::string_view payload) +{ + reply rep; + rep.status = status; + if ( status != reply::no_content) { + rep.content = payload; + rep.headers.reserve(2); + rep.headers.emplace_back("Content-Length", std::to_string(rep.content.size())); + rep.headers.emplace_back("Content-Type", mime); } return rep; } diff --git a/CRUD/service/reply.hpp b/CRUD/service/reply.hpp index b38c3b0..d9c8187 100644 --- a/CRUD/service/reply.hpp +++ b/CRUD/service/reply.hpp @@ -61,6 +61,9 @@ struct reply /// Get a stock reply. static reply stock_reply(status_type status, const char* mime = mime_types::HTML); + + /// Build a custom reply. + static reply custom_reply(status_type status, const char* mime, std::string_view payload); /// flush function to be used by reply & operator<<(reply &r , const reply::flush &) template