summaryrefslogtreecommitdiff
path: root/vendor/jsoncons-0.104.0/jsoncons/json_filter.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/jsoncons-0.104.0/jsoncons/json_filter.hpp')
-rw-r--r--vendor/jsoncons-0.104.0/jsoncons/json_filter.hpp465
1 files changed, 465 insertions, 0 deletions
diff --git a/vendor/jsoncons-0.104.0/jsoncons/json_filter.hpp b/vendor/jsoncons-0.104.0/jsoncons/json_filter.hpp
new file mode 100644
index 00000000..30b69e18
--- /dev/null
+++ b/vendor/jsoncons-0.104.0/jsoncons/json_filter.hpp
@@ -0,0 +1,465 @@
+// Copyright 2013 Daniel Parker
+// Distributed under the Boost license, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+// See https://github.com/danielaparker/jsoncons for latest version
+
+#ifndef JSONCONS_JSON_FILTER_HPP
+#define JSONCONS_JSON_FILTER_HPP
+
+#include <string>
+
+#include <jsoncons/json_input_handler.hpp>
+#include <jsoncons/json_output_handler.hpp>
+#include <jsoncons/parse_error_handler.hpp>
+
+namespace jsoncons {
+
+template <class CharT>
+class basic_json_output_input_adapter : public basic_json_input_handler<CharT>
+{
+public:
+ using typename basic_json_input_handler<CharT>::string_view_type;
+private:
+
+ basic_null_json_output_handler<CharT> null_output_handler_;
+ basic_json_output_handler<CharT>& output_handler_;
+
+ // noncopyable and nonmoveable
+ basic_json_output_input_adapter<CharT>(const basic_json_output_input_adapter<CharT>&) = delete;
+ basic_json_output_input_adapter<CharT>& operator=(const basic_json_output_input_adapter<CharT>&) = delete;
+
+public:
+ basic_json_output_input_adapter()
+ : output_handler_(null_output_handler_)
+ {
+ }
+
+ basic_json_output_input_adapter(basic_json_output_handler<CharT>& handler)
+ : output_handler_(handler)
+ {
+ }
+
+private:
+
+ void do_begin_json() override
+ {
+ output_handler_.begin_json();
+ }
+
+ void do_end_json() override
+ {
+ output_handler_.end_json();
+ }
+
+ void do_begin_object(const parsing_context&) override
+ {
+ output_handler_.begin_object();
+ }
+
+ void do_begin_object(size_t length, const parsing_context&) override
+ {
+ output_handler_.begin_object(length);
+ }
+
+ void do_end_object(const parsing_context&) override
+ {
+ output_handler_.end_object();
+ }
+
+ void do_begin_array(const parsing_context&) override
+ {
+ output_handler_.begin_array();
+ }
+
+ void do_begin_array(size_t length, const parsing_context&) override
+ {
+ output_handler_.begin_array(length);
+ }
+
+ void do_end_array(const parsing_context&) override
+ {
+ output_handler_.end_array();
+ }
+
+ void do_name(const string_view_type& name,
+ const parsing_context&) override
+ {
+ output_handler_.name(name);
+ }
+
+ void do_string_value(const string_view_type& value,
+ const parsing_context&) override
+ {
+ output_handler_.string_value(value);
+ }
+
+ void do_byte_string_value(const uint8_t* data, size_t length,
+ const parsing_context&) override
+ {
+ output_handler_.byte_string_value(data, length);
+ }
+
+ void do_integer_value(int64_t value, const parsing_context&) override
+ {
+ output_handler_.integer_value(value);
+ }
+
+ void do_uinteger_value(uint64_t value,
+ const parsing_context&) override
+ {
+ output_handler_.uinteger_value(value);
+ }
+
+ void do_double_value(double value, const number_format& fmt, const parsing_context&) override
+ {
+ output_handler_.double_value(value, fmt);
+ }
+
+ void do_bool_value(bool value, const parsing_context&) override
+ {
+ output_handler_.bool_value(value);
+ }
+
+ void do_null_value(const parsing_context&) override
+ {
+ output_handler_.null_value();
+ }
+};
+
+template <class CharT>
+class basic_json_input_output_adapter : public basic_json_output_handler<CharT>
+{
+public:
+ using typename basic_json_output_handler<CharT>::string_view_type ;
+private:
+ class null_parsing_context : public parsing_context
+ {
+ size_t do_line_number() const override { return 0; }
+
+ size_t do_column_number() const override { return 0; }
+ };
+ const null_parsing_context default_context_ = null_parsing_context();
+
+ basic_null_json_input_handler<CharT> null_input_handler_;
+ basic_json_output_input_adapter<CharT> default_input_output_adapter_;
+ basic_json_input_handler<CharT>& input_handler_;
+ const basic_json_output_input_adapter<CharT>& input_output_adapter_;
+
+ // noncopyable and nonmoveable
+ basic_json_input_output_adapter<CharT>(const basic_json_input_output_adapter<CharT>&) = delete;
+ basic_json_input_output_adapter<CharT>& operator=(const basic_json_input_output_adapter<CharT>&) = delete;
+
+public:
+ basic_json_input_output_adapter()
+ : input_handler_(null_input_handler_),
+ input_output_adapter_(default_input_output_adapter_)
+ {
+ }
+ basic_json_input_output_adapter(basic_json_input_handler<CharT>& input_handler)
+ : input_handler_(input_handler),
+ input_output_adapter_(default_input_output_adapter_)
+ {
+ }
+ basic_json_input_output_adapter(basic_json_input_handler<CharT>& input_handler,
+ const basic_json_output_input_adapter<CharT>& input_output_adapter)
+ : input_handler_(input_handler),
+ input_output_adapter_(input_output_adapter)
+ {
+ }
+
+private:
+
+ void do_begin_json() override
+ {
+ input_handler_.begin_json();
+ }
+
+ void do_end_json() override
+ {
+ input_handler_.end_json();
+ }
+
+ void do_begin_object() override
+ {
+ input_handler_.begin_object(default_context_);
+ }
+
+ void do_begin_object(size_t length) override
+ {
+ input_handler_.begin_object(length, default_context_);
+ }
+
+ void do_end_object() override
+ {
+ input_handler_.end_object(default_context_);
+ }
+
+ void do_begin_array() override
+ {
+ input_handler_.begin_array(default_context_);
+ }
+
+ void do_begin_array(size_t length) override
+ {
+ input_handler_.begin_array(length, default_context_);
+ }
+
+ void do_end_array() override
+ {
+ input_handler_.end_array(default_context_);
+ }
+
+ void do_name(const string_view_type& name) override
+ {
+ input_handler_.name(name, default_context_);
+ }
+
+ void do_string_value(const string_view_type& value) override
+ {
+ input_handler_.string_value(value, default_context_);
+ }
+
+ void do_byte_string_value(const uint8_t* data, size_t length) override
+ {
+ input_handler_.byte_string_value(data, length, default_context_);
+ }
+
+ void do_integer_value(int64_t value) override
+ {
+ input_handler_.integer_value(value, default_context_);
+ }
+
+ void do_uinteger_value(uint64_t value) override
+ {
+ input_handler_.uinteger_value(value, default_context_);
+ }
+
+ void do_double_value(double value, const number_format& fmt) override
+ {
+ input_handler_.double_value(value, fmt, default_context_);
+ }
+
+ void do_bool_value(bool value) override
+ {
+ input_handler_.bool_value(value, default_context_);
+ }
+
+ void do_null_value() override
+ {
+ input_handler_.null_value(default_context_);
+ }
+};
+
+template <class CharT>
+class basic_json_filter : public basic_json_input_handler<CharT>
+{
+public:
+ using typename basic_json_input_handler<CharT>::string_view_type ;
+private:
+ basic_json_output_input_adapter<CharT> input_output_adapter_;
+ basic_json_input_output_adapter<CharT> output_input_adapter_;
+ basic_json_output_handler<CharT>& output_handler_;
+ basic_json_input_handler<CharT>& downstream_handler_;
+
+ // noncopyable and nonmoveable
+ basic_json_filter<CharT>(const basic_json_filter<CharT>&) = delete;
+ basic_json_filter<CharT>& operator=(const basic_json_filter<CharT>&) = delete;
+public:
+ basic_json_filter(basic_json_output_handler<CharT>& handler)
+ : input_output_adapter_(handler),
+ output_input_adapter_(*this),
+ output_handler_(output_input_adapter_),
+ downstream_handler_(input_output_adapter_)
+ {
+ }
+
+ basic_json_filter(basic_json_input_handler<CharT>& handler)
+ : output_input_adapter_(*this),
+ output_handler_(output_input_adapter_),
+ downstream_handler_(handler)
+ {
+ }
+
+ operator basic_json_output_handler<CharT>&()
+ {
+ return output_handler_;
+ }
+
+#if !defined(JSONCONS_NO_DEPRECATED)
+ basic_json_input_handler<CharT>& input_handler()
+ {
+ return downstream_handler_;
+ }
+#endif
+
+ basic_json_input_handler<CharT>& downstream_handler()
+ {
+ return downstream_handler_;
+ }
+
+private:
+ void do_begin_json() override
+ {
+ downstream_handler_.begin_json();
+ }
+
+ void do_end_json() override
+ {
+ downstream_handler_.end_json();
+ }
+
+ void do_begin_object(const parsing_context& context) override
+ {
+ downstream_handler_.begin_object(context);
+ }
+
+ void do_begin_object(size_t length, const parsing_context& context) override
+ {
+ downstream_handler_.begin_object(length, context);
+ }
+
+ void do_end_object(const parsing_context& context) override
+ {
+ downstream_handler_.end_object(context);
+ }
+
+ void do_begin_array(const parsing_context& context) override
+ {
+ downstream_handler_.begin_array(context);
+ }
+
+ void do_begin_array(size_t length, const parsing_context& context) override
+ {
+ downstream_handler_.begin_array(length, context);
+ }
+
+ void do_end_array(const parsing_context& context) override
+ {
+ downstream_handler_.end_array(context);
+ }
+
+ void do_name(const string_view_type& name,
+ const parsing_context& context) override
+ {
+ downstream_handler_.name(name,context);
+ }
+
+ void do_string_value(const string_view_type& value,
+ const parsing_context& context) override
+ {
+ downstream_handler_.string_value(value,context);
+ }
+
+ void do_byte_string_value(const uint8_t* data, size_t length,
+ const parsing_context& context) override
+ {
+ downstream_handler_.byte_string_value(data, length, context);
+ }
+
+ void do_double_value(double value, const number_format& fmt,
+ const parsing_context& context) override
+ {
+ downstream_handler_.double_value(value, fmt, context);
+ }
+
+ void do_integer_value(int64_t value,
+ const parsing_context& context) override
+ {
+ downstream_handler_.integer_value(value,context);
+ }
+
+ void do_uinteger_value(uint64_t value,
+ const parsing_context& context) override
+ {
+ downstream_handler_.uinteger_value(value,context);
+ }
+
+ void do_bool_value(bool value,
+ const parsing_context& context) override
+ {
+ downstream_handler_.bool_value(value,context);
+ }
+
+ void do_null_value(const parsing_context& context) override
+ {
+ downstream_handler_.null_value(context);
+ }
+
+};
+
+// Filters out begin_json and end_json events
+template <class CharT>
+class basic_json_fragment_filter : public basic_json_filter<CharT>
+{
+public:
+ using typename basic_json_filter<CharT>::string_view_type;
+
+ basic_json_fragment_filter(basic_json_input_handler<CharT>& handler)
+ : basic_json_filter<CharT>(handler)
+ {
+ }
+private:
+ void do_begin_json() override
+ {
+ }
+
+ void do_end_json() override
+ {
+ }
+};
+
+template <class CharT>
+class basic_rename_object_member_filter : public basic_json_filter<CharT>
+{
+public:
+ using typename basic_json_filter<CharT>::string_view_type;
+
+private:
+ std::basic_string<CharT> name_;
+ std::basic_string<CharT> new_name_;
+public:
+ basic_rename_object_member_filter(const std::basic_string<CharT>& name,
+ const std::basic_string<CharT>& new_name,
+ basic_json_output_handler<CharT>& handler)
+ : basic_json_filter<CharT>(handler),
+ name_(name), new_name_(new_name)
+ {
+ }
+
+ basic_rename_object_member_filter(const std::basic_string<CharT>& name,
+ const std::basic_string<CharT>& new_name,
+ basic_json_input_handler<CharT>& handler)
+ : basic_json_filter<CharT>(handler),
+ name_(name), new_name_(new_name)
+ {
+ }
+
+private:
+ void do_name(const string_view_type& name,
+ const parsing_context& context) override
+ {
+ if (name == name_)
+ {
+ this->downstream_handler().name(new_name_,context);
+ }
+ else
+ {
+ this->downstream_handler().name(name,context);
+ }
+ }
+};
+
+typedef basic_json_filter<char> json_filter;
+typedef basic_json_filter<wchar_t> wjson_filter;
+typedef basic_rename_object_member_filter<char> rename_object_member_filter;
+typedef basic_rename_object_member_filter<wchar_t> wrename_object_member_filter;
+
+#if !defined(JSONCONS_NO_DEPRECATED)
+typedef basic_rename_object_member_filter<char> rename_name_filter;
+typedef basic_rename_object_member_filter<wchar_t> wrename_name_filter;
+#endif
+
+}
+
+#endif