summaryrefslogtreecommitdiffhomepage
path: root/dev/lib/utility/cgi.hpp
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-11-22 02:28:44 -0500
committerGitHub <noreply@github.com>2025-11-22 02:28:44 -0500
commit8470a48ef4c6ea4b16e9a764aaedc7158f9c37ed (patch)
tree9c6e64d288199110887e599458b212a36183572f /dev/lib/utility/cgi.hpp
parent6f8c36c3e004b9dc6802128f1cae34812cb8287b (diff)
parent32af6ab79fe52efa6fc773a672e2732388999692 (diff)
Merge pull request #16 from amlel-el-mahrouss/developv1.0.471
chore & fix: codebase improvements and repo maintenance.
Diffstat (limited to 'dev/lib/utility/cgi.hpp')
-rw-r--r--dev/lib/utility/cgi.hpp79
1 files changed, 79 insertions, 0 deletions
diff --git a/dev/lib/utility/cgi.hpp b/dev/lib/utility/cgi.hpp
new file mode 100644
index 0000000..fd00bbf
--- /dev/null
+++ b/dev/lib/utility/cgi.hpp
@@ -0,0 +1,79 @@
+/*
+ * File: cgi.hpp
+ * Author: Amlal El Mahrouss,
+ * Copyright 2023-2025, Amlal El Mahrouss, Licensed under the Boost Software License.
+ */
+
+#ifndef _OCL_CGI_HPP
+#define _OCL_CGI_HPP
+
+#include <lib/io/print.hpp>
+#include <lib/core/chunk_string.hpp>
+#include <sstream>
+#include <format>
+
+namespace ocl
+{
+ namespace cgi
+ {
+ /// @brief CGI Writer class, writes to stdout; as CGI expects.
+ template <typename char_type = char>
+ class basic_writer
+ {
+ private:
+ basic_writer& eval_(const basic_chunk_string<char_type>& mime, const basic_chunk_string<char_type>& ss) noexcept
+ {
+ std::basic_stringstream<char_type> ss_out;
+
+ ss_out << std::format("Content-Type: {}\r\n", mime.str());
+ ss_out << std::format("Server: {}\r\n", "OCL/1.0");
+ ss_out << std::format("Content-Length: {}\r\n\r\n", ss.str().size());
+ ss_out << ss.str();
+
+ io::print(ss_out.str());
+
+ return *this;
+ }
+
+ public:
+ explicit basic_writer() = default;
+ virtual ~basic_writer() = default;
+
+ basic_writer& operator=(const basic_writer&) = default;
+ basic_writer(const basic_writer&) = default;
+
+ public:
+ friend void operator<<(basic_writer& self, const basic_chunk_string<char_type>& ss_in)
+ {
+ self = self.eval_("text/plain", ss_in);
+ }
+
+ basic_writer& binary(const basic_chunk_string<char_type>& ss_in)
+ {
+ return this->eval_("application/octet-stream", ss_in);
+ }
+
+ basic_writer& html(const basic_chunk_string<char_type>& ss_in)
+ {
+ return this->eval_("text/html", ss_in);
+ }
+
+ basic_writer& xml(const basic_chunk_string<char_type>& ss_in)
+ {
+ return this->eval_("application/xml", ss_in);
+ }
+
+ basic_writer& json(const basic_chunk_string<char_type>& ss_in)
+ {
+ return this->eval_("application/json", ss_in);
+ }
+
+ basic_writer& js(const basic_chunk_string<char_type>& ss_in)
+ {
+ return this->eval_("text/javascript", ss_in);
+ }
+ };
+ } // namespace cgi
+} // namespace ocl
+
+#endif // ifndef _OCL_CGI_HPP