diff options
Diffstat (limited to 'src/errors/io.hpp')
-rw-r--r-- | src/errors/io.hpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/errors/io.hpp b/src/errors/io.hpp new file mode 100644 index 0000000..1d0aec3 --- /dev/null +++ b/src/errors/io.hpp @@ -0,0 +1,55 @@ +#pragma once + +#include "util/fs.hpp" + +#include <fmt/core.h> + +#include <filesystem> +#include <stdexcept> +#include <string> + +class IOError : public std::runtime_error +{ +public: + IOError() noexcept : std::runtime_error("Unknown IO error") {} + + explicit IOError(const std::string &error_message) noexcept + : std::runtime_error(error_message) + { + } +}; + +class NoSuchFileOrDirectoryError : public IOError +{ +public: + explicit NoSuchFileOrDirectoryError(const std::filesystem::path &path) noexcept + : IOError( + fmt::format("No file or directory exists with path '{}'", path.string())) + { + } +}; + +class WrongFileTypeError : public IOError +{ +public: + explicit WrongFileTypeError( + const std::filesystem::path &path, + std::filesystem::file_type expected_file_type, + std::filesystem::file_type actual_file_type) noexcept + : IOError(fmt::format( + "Wrong file type of file with path '{}'. Expected {}, is {}", + path.string(), + file_type_names.at(expected_file_type), + file_type_names.at(actual_file_type))) + { + } +}; + +class FileNotOpenError : public IOError +{ +public: + explicit FileNotOpenError(const std::filesystem::path &path) noexcept + : IOError(fmt::format("Failed to open file with path '{}'", path.string())) + { + } +}; |