summaryrefslogtreecommitdiffhomepage
path: root/dev/lib/utility/cgi.hpp
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-11-22 07:49:01 +0100
committerAmlal El Mahrouss <amlal@nekernel.org>2025-11-22 07:49:01 +0100
commit97cb8e1b8a4e1df3ed65ac5aa684c7babd1771dc (patch)
tree2e620bc2ca36b7f7c0c0d9eb606bc68cb04174fb /dev/lib/utility/cgi.hpp
parent804afb1895fa9aa6c45645bb097bf4937e9d851d (diff)
chore: small source code tweaks.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
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