summaryrefslogtreecommitdiffstats
path: root/include/orcus/exception.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/orcus/exception.hpp')
-rw-r--r--include/orcus/exception.hpp152
1 files changed, 152 insertions, 0 deletions
diff --git a/include/orcus/exception.hpp b/include/orcus/exception.hpp
new file mode 100644
index 0000000..5d1aa82
--- /dev/null
+++ b/include/orcus/exception.hpp
@@ -0,0 +1,152 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef INCLUDED_ORCUS_EXCEPTION_HPP
+#define INCLUDED_ORCUS_EXCEPTION_HPP
+
+#include <stdexcept>
+#include <string>
+
+#include "env.hpp"
+
+namespace orcus {
+
+class ORCUS_PSR_DLLPUBLIC general_error : public std::exception
+{
+public:
+ explicit general_error(std::string msg);
+ explicit general_error(std::string_view cls, std::string_view msg);
+ virtual ~general_error() noexcept;
+ virtual const char* what() const noexcept;
+
+protected:
+ void append_msg(const std::string& s);
+
+private:
+ std::string m_msg;
+};
+
+class ORCUS_PSR_DLLPUBLIC invalid_arg_error : public std::invalid_argument
+{
+public:
+ explicit invalid_arg_error(const std::string& msg);
+ virtual ~invalid_arg_error() noexcept;
+};
+
+class ORCUS_PSR_DLLPUBLIC xml_structure_error : public general_error
+{
+public:
+ explicit xml_structure_error(std::string msg);
+ virtual ~xml_structure_error() noexcept;
+};
+
+class ORCUS_PSR_DLLPUBLIC json_structure_error : public general_error
+{
+public:
+ explicit json_structure_error(std::string msg);
+ virtual ~json_structure_error() noexcept;
+};
+
+class ORCUS_PSR_DLLPUBLIC invalid_map_error : public general_error
+{
+public:
+ explicit invalid_map_error(std::string msg);
+ virtual ~invalid_map_error() noexcept;
+};
+
+class ORCUS_PSR_DLLPUBLIC value_error : public general_error
+{
+public:
+ explicit value_error(std::string msg);
+ virtual ~value_error() noexcept;
+};
+
+/**
+ * Error indicating improper xpath syntax.
+ */
+class ORCUS_PSR_DLLPUBLIC xpath_error : public general_error
+{
+public:
+ xpath_error(std::string msg);
+ virtual ~xpath_error() noexcept;
+};
+
+/**
+ * This gets thrown when a public interface method is expected to return a
+ * non-null pointer to another interface but actually returns a null pointer.
+ */
+class ORCUS_PSR_DLLPUBLIC interface_error : public general_error
+{
+public:
+ interface_error(std::string msg);
+ virtual ~interface_error() noexcept;
+};
+
+/**
+ * Exception related to a parsing error that includes an offset in the stream
+ * where the error occurred.
+ */
+class ORCUS_PSR_DLLPUBLIC parse_error : public general_error
+{
+ std::ptrdiff_t m_offset; /// offset in the stream where the error occurred.
+
+protected:
+ parse_error(std::string_view cls, std::string_view msg, std::ptrdiff_t offset);
+
+public:
+ parse_error(std::string msg, std::ptrdiff_t offset);
+
+ /**
+ * Get the offset in a stream associated with the error.
+ *
+ * @return offset in a stream where the error occurred.
+ */
+ std::ptrdiff_t offset() const;
+
+ static void throw_with(
+ std::string_view msg_before, char c, std::string_view msg_after, std::ptrdiff_t offset);
+
+ static void throw_with(
+ std::string_view msg_before, std::string_view msg, std::string_view msg_after, std::ptrdiff_t offset);
+};
+
+/**
+ * This exception is thrown when SAX parser detects a malformed XML document.
+ */
+class ORCUS_PSR_DLLPUBLIC malformed_xml_error : public parse_error
+{
+public:
+ malformed_xml_error() = delete;
+ malformed_xml_error(std::string_view msg, std::ptrdiff_t offset);
+ virtual ~malformed_xml_error();
+};
+
+/**
+ * Exception related to parsing of zip archive stream.
+ */
+class ORCUS_PSR_DLLPUBLIC zip_error : public general_error
+{
+public:
+ zip_error(std::string_view msg);
+ virtual ~zip_error();
+};
+
+namespace detail {
+
+/**
+ * Internal error used in multi-threaded parsing to signal that the parser
+ * thread has been aborted.
+ */
+class ORCUS_PSR_DLLPUBLIC parsing_aborted_error : public std::exception {};
+
+}
+
+}
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */