aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFJob_json.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-01-26 22:48:18 +0100
committerJay Berkenbilt <ejb@ql.org>2022-01-30 19:11:03 +0100
commit9013b7ca919c13b03488056dff55ffbf5215f008 (patch)
treeb3115571daa56be175614e8d92b7c778b11d6b14 /libqpdf/QPDFJob_json.cc
parentedef2cd330d0f4ca77f75e7192628a64bf67de3e (diff)
downloadqpdf-9013b7ca919c13b03488056dff55ffbf5215f008.tar.zst
QPDFJob: move placeholder json to a separate source file
Diffstat (limited to 'libqpdf/QPDFJob_json.cc')
-rw-r--r--libqpdf/QPDFJob_json.cc99
1 files changed, 99 insertions, 0 deletions
diff --git a/libqpdf/QPDFJob_json.cc b/libqpdf/QPDFJob_json.cc
new file mode 100644
index 00000000..74fd27bd
--- /dev/null
+++ b/libqpdf/QPDFJob_json.cc
@@ -0,0 +1,99 @@
+#include <qpdf/QPDFJob.hh>
+#include <qpdf/JSONHandler.hh>
+
+#include <memory>
+#include <stdexcept>
+#include <sstream>
+
+static JSON JOB_SCHEMA = JSON::parse(QPDFJob::json_job_schema_v1().c_str());
+
+void
+QPDFJob::initializeFromJson(std::string const& json)
+{
+ std::list<std::string> errors;
+ JSON j = JSON::parse(json);
+ if (! j.checkSchema(JOB_SCHEMA, JSON::f_optional, errors))
+ {
+ std::ostringstream msg;
+ msg << this->m->message_prefix
+ << ": job json has errors:";
+ for (auto const& error: errors)
+ {
+ msg << std::endl << " " << error;
+ }
+ throw std::runtime_error(msg.str());
+ }
+
+ JSONHandler jh;
+ {
+ jh.addDictHandlers(
+ [](std::string const&){},
+ [](std::string const&){});
+
+ auto input = std::make_shared<JSONHandler>();
+ auto input_file = std::make_shared<JSONHandler>();
+ auto input_file_name = std::make_shared<JSONHandler>();
+ auto output = std::make_shared<JSONHandler>();
+ auto output_file = std::make_shared<JSONHandler>();
+ auto output_file_name = std::make_shared<JSONHandler>();
+ auto output_options = std::make_shared<JSONHandler>();
+ auto output_options_qdf = std::make_shared<JSONHandler>();
+
+ input->addDictHandlers(
+ [](std::string const&){},
+ [](std::string const&){});
+ input_file->addDictHandlers(
+ [](std::string const&){},
+ [](std::string const&){});
+ output->addDictHandlers(
+ [](std::string const&){},
+ [](std::string const&){});
+ output_file->addDictHandlers(
+ [](std::string const&){},
+ [](std::string const&){});
+ output_options->addDictHandlers(
+ [](std::string const&){},
+ [](std::string const&){});
+
+ jh.addDictKeyHandler("input", input);
+ input->addDictKeyHandler("file", input_file);
+ input_file->addDictKeyHandler("name", input_file_name);
+ jh.addDictKeyHandler("output", output);
+ output->addDictKeyHandler("file", output_file);
+ output_file->addDictKeyHandler("name", output_file_name);
+ output->addDictKeyHandler("options", output_options);
+ output_options->addDictKeyHandler("qdf", output_options_qdf);
+
+ input_file_name->addStringHandler(
+ [this](std::string const&, std::string const& v) {
+ config()->inputFile(v.c_str());
+ });
+ output_file_name->addStringHandler(
+ [this](std::string const&, std::string const& v) {
+ config()->outputFile(v.c_str());
+ });
+ output_options_qdf->addBoolHandler(
+ [this](std::string const&, bool v) {
+ // QXXXQ require v to be true
+ config()->qdf();
+ });
+ }
+
+ // {
+ // "input": {
+ // "file": {
+ // "name": "/home/ejb/source/examples/pdf/minimal.pdf"
+ // }
+ // },
+ // "output": {
+ // "file": {
+ // "name": "/tmp/a.pdf"
+ // },
+ // "options": {
+ // "qdf": true
+ // }
+ // }
+ // }
+
+ jh.handle(".", j);
+}