diff options
author | ipknHama <ipknhama@gmail.com> | 2014-08-08 03:53:36 +0900 |
---|---|---|
committer | ipknHama <ipknhama@gmail.com> | 2014-08-08 03:53:36 +0900 |
commit | 3018ff063acb747065adea877e3e2ac9423f5233 (patch) | |
tree | 110f1a6596242b7837c16f88b4838d6fd93dc93c /include/http_response.h | |
parent | a0c93f5b84cc11b30bc6320ac26127832ef8bf7a (diff) | |
parent | 001c66b378d200bdecc8a4a692c5a73a7d426b8f (diff) | |
download | crow-3018ff063acb747065adea877e3e2ac9423f5233.tar.gz crow-3018ff063acb747065adea877e3e2ac9423f5233.zip |
Merge branch 'directory-restructuring'
Directory structure changed.
Crow becomes a complete header-only library with http_parser_merged.h.
Provides amalgamated crow_all.h (all feature in one header file).
Diffstat (limited to 'include/http_response.h')
-rw-r--r-- | include/http_response.h | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/include/http_response.h b/include/http_response.h new file mode 100644 index 0000000..ae92543 --- /dev/null +++ b/include/http_response.h @@ -0,0 +1,86 @@ +#pragma once +#include <string> +#include <unordered_map> +#include "json.h" + +namespace crow +{ + template <typename T> + class Connection; + struct response + { + template <typename T> + friend class crow::Connection; + + std::string body; + json::wvalue json_value; + int code{200}; + std::unordered_map<std::string, std::string> headers; + + response() {} + explicit response(int code) : code(code) {} + response(std::string body) : body(std::move(body)) {} + response(json::wvalue&& json_value) : json_value(std::move(json_value)) {} + response(const json::wvalue& json_value) : body(json::dump(json_value)) {} + response(int code, std::string body) : body(std::move(body)), code(code) {} + + response(response&& r) + { + *this = std::move(r); + } + + response& operator = (const response& r) = delete; + + response& operator = (response&& r) + { + body = std::move(r.body); + json_value = std::move(r.json_value); + code = r.code; + headers = std::move(r.headers); + completed_ = r.completed_; + return *this; + } + + void clear() + { + body.clear(); + json_value.clear(); + code = 200; + headers.clear(); + completed_ = false; + } + + void write(const std::string& body_part) + { + body += body_part; + } + + void end() + { + if (!completed_) + { + completed_ = true; + if (complete_request_handler_) + { + complete_request_handler_(); + } + } + } + + void end(const std::string& body_part) + { + body += body_part; + end(); + } + + bool is_alive() + { + return is_alive_helper_ && is_alive_helper_(); + } + + private: + bool completed_{}; + std::function<void()> complete_request_handler_; + std::function<bool()> is_alive_helper_; + }; +} |